Arquitectura de software para autenticación / control de acceso del servicio web REST

12

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)

Allen
fuente
Parece que solo necesitas que alguien lo escriba por ti;)
Martin Blore
Lamentablemente, parece de esa manera. Parecía extraño que esta parte de la pila no se describiera en ninguna parte. Incluso si pudiera encontrar una descripción de cómo un sitio como newegg, digg o incluso stackoverflow maneja las credenciales de usuario y el acceso en el back-end, eso ayudaría.
Allen
¿Has progresado en esto?
Bryan Agee
¿Has considerado oAuth2 ? Hay bibliotecas de servidor y cliente disponibles en muchos idiomas populares que deberían facilitar su implementación.
Sam

Respuestas:

5

OpenAM.

http://forgerock.com/openam.html

¿Cómo deben almacenarse los detalles del usuario y los derechos de acceso? (modelo de datos, ubicación, formato)

Gerente de Identidad. Separado de cualquier servidor web. Basado en LDAP.

¿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.)

Resuelto por su marco. No pienses más. Simplemente use los buenos patrones de diseño ya construidos de su marco.

¿Cuáles son los buenos patrones para asignar estos derechos a los servicios de forma segura en la base del código?

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.

¿Qué opciones arquitectónicas pueden ayudar a mantener el sistema más seguro y confiable?

¿Más? ¿Más que qué?

S.Lott
fuente
En mi configuración específica, no creo que pueda usar algo como OpenAM. No necesito el inicio de sesión único en toda la empresa. Creo que necesito algo más pequeño y más autónomo.
Allen
@Allen. No lo usamos para el inicio de sesión único en toda la empresa. Lo usamos para la gestión de identidad simple.
S.Lott