Estoy configurando un nuevo servicio web RESTful y necesito proporcionar un modelo de control de acceso basado en roles . Necesito crear una arquitectura que permita a los usuarios proporcionar su nombre de usuario y contraseña para acceder a los servicios y luego restringir cómo pueden usar los servicios (qué servicios pueden usar, leer frente a leer / escribir, etc.) según los roles asignado a esos usuarios.
Miré otras preguntas y encontré piezas de lo que quiero. Por ejemplo, hay varias excelentes discusiones sobre cómo manejar las credenciales para pasar a los servicios REST de autenticación tranquila , mejores prácticas . También hay algunos buenos consejos sobre lo que los programadores deben saber al crear sitios web ( lo que todo desarrollador debe saber antes de crear un sitio web público ).
Pero no he podido encontrar una buena publicación, artículo, libro sobre las mejores prácticas y patrones para la arquitectura de software que implementa estas soluciones.
Específicamente:
- ¿Cómo deben almacenarse los detalles del usuario y los derechos de acceso? (modelo de datos, ubicación, formato)
- ¿Cuáles son los buenos patrones de diseño para representarlos y rastrearlos en el servidor? (sesiones en memoria, búsquedas de db cada vez, etc.)
- ¿Cuáles son los buenos patrones para asignar estos derechos a los servicios de forma segura en la base del código?
- ¿Qué opciones arquitectónicas pueden ayudar a mantener el sistema más seguro y confiable?
- ¿Qué lecciones aprendidas tienen las personas de las trincheras?
Estoy buscando patrones de diseño y recomendaciones para la arquitectura de software fuera de cualquier tecnología específica.
(Si las tecnologías importan, estoy planeando implementar esto usando python, twisted y una base de datos postgresql)
Respuestas:
OpenAM.
http://forgerock.com/openam.html
Gerente de Identidad. Separado de cualquier servidor web. Basado en LDAP.
Resuelto por su marco. No pienses más. Simplemente use los buenos patrones de diseño ya construidos de su marco.
Resuelto por su marco. Cada marco utiliza un enfoque ligeramente diferente. Cada idioma tiene características ligeramente diferentes. Django, por ejemplo, usa mucho los decoradores de Python para esto.
¿Más? ¿Más que qué?
fuente