Arquitetura de software para autenticação / controle de acesso do serviço web REST

12

Estou configurando um novo serviço web RESTful e preciso fornecer um modelo de controle de acesso baseado em função . Preciso criar uma arquitetura que permita que os usuários forneçam seu nome de usuário e senha para obter acesso aos serviços e depois restrinjam como eles podem usar os serviços (quais serviços eles podem usar, ler vs ler / gravar etc.) com base nas funções atribuído a esses usuários.

Eu olhei em volta para outras perguntas e encontrei pedaços do que eu quero. Por exemplo, existem várias ótimas discussões sobre como lidar com a passagem de credenciais para autenticação restful de serviços REST , práticas recomendadas . Existem também algumas dicas importantes sobre o que os programadores devem saber ao criar sites (o que todo desenvolvedor deve saber antes de criar um site público ).

Mas não consegui encontrar um bom post, artigo, livro sobre práticas recomendadas e padrões para a arquitetura de software que implementa essas soluções.

Especificamente:

  • Como os detalhes do usuário e os direitos de acesso devem ser armazenados? (modelo de dados, localização, formato)
  • Quais são os bons padrões de design para representá-los e acompanhá-los no servidor? (sessões na memória, pesquisas de banco de dados sempre, etc)
  • Quais são os bons padrões para mapear esses direitos para os serviços de maneira segura na base de código?
  • Quais opções de arquitetura podem ajudar a manter o sistema mais seguro e confiável?
  • Que lições aprendidas as pessoas têm das trincheiras?

Estou procurando padrões de design e recomendações para a arquitetura de software fora de qualquer tecnologia específica.

(Se as tecnologias importarem, estou planejando implementar isso usando python, twisted e um banco de dados postgresql)

Allen
fonte
Parece que você só precisa de alguém para escrever para você;)
Martin Blore
Infelizmente, parece que sim. Parecia estranho que essa parte da pilha não fosse descrita em nenhum lugar. Mesmo que eu pudesse encontrar uma descrição de como um site como newegg, digg ou até mesmo stackoverflow lida com credenciais de usuário e acesso no back-end, isso ajudaria.
Allen
Você fez algum progresso nisso?
Bryan Agee
Você já considerou oAuth2 ? Existem bibliotecas de servidores e clientes disponíveis em vários idiomas populares que facilitam sua implementação.
Sam

Respostas:

5

OpenAM.

http://forgerock.com/openam.html

Como os detalhes do usuário e os direitos de acesso devem ser armazenados? (modelo de dados, localização, formato)

Gerenciador de identidade. Separe de qualquer servidor web. Baseado em LDAP.

Quais são os bons padrões de design para representá-los e acompanhá-los no servidor? (sessões na memória, pesquisas de banco de dados sempre, etc)

Resolvido pelo seu framework. Não pense mais. Basta usar os bons padrões de design já construídos da sua estrutura.

Quais são os bons padrões para mapear esses direitos para os serviços de maneira segura na base de código?

Resolvido pelo seu framework. Cada estrutura usa uma abordagem ligeiramente diferente. Cada idioma possui recursos ligeiramente diferentes. O Django, por exemplo, usa muito os decoradores do Python para isso.

Quais opções de arquitetura podem ajudar a manter o sistema mais seguro e confiável?

Mais? Mais do que o que?

S.Lott
fonte
Na minha configuração específica, acho que não posso usar algo como o OpenAM. Não preciso de logon único para toda a empresa. Eu acho que preciso de algo menor e mais independente.
Allen
@Allen. Não o usamos para logon único em toda a empresa. Nós o usamos para gerenciamento simples de identidade.
precisa saber é o seguinte