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)
Respostas:
OpenAM.
http://forgerock.com/openam.html
Gerenciador de identidade. Separe de qualquer servidor web. Baseado em LDAP.
Resolvido pelo seu framework. Não pense mais. Basta usar os bons padrões de design já construídos da sua estrutura.
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.
Mais? Mais do que o que?
fonte