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)