Architecture logicielle pour l'authentification / le contrôle d'accès du service Web REST

12

Je mets en place un nouveau service Web RESTful et je dois fournir un modèle de contrôle d'accès basé sur les rôles . J'ai besoin de créer une architecture qui permettra aux utilisateurs de fournir leur nom d'utilisateur et leur mot de passe pour accéder aux services, puis de restreindre la façon dont ils peuvent utiliser les services (quels services ils peuvent utiliser, lire vs lire / écrire, etc.) en fonction des rôles attribué à ces utilisateurs.

J'ai regardé autour d'autres questions et trouvé des morceaux de ce que je veux. Par exemple, il existe plusieurs discussions intéressantes sur la façon de gérer les informations d'identification transmises aux services REST, l' authentification reposante , les meilleures pratiques . Il existe également d'excellents conseils sur ce que les programmeurs doivent savoir lors de la création de sites Web ( ce que chaque développeur doit savoir avant de créer un site Web public ).

Mais je n'ai pas été en mesure de trouver un bon poste, article, livre sur les meilleures pratiques et les modèles pour l'architecture logicielle qui implémente ces solutions.

Plus précisément:

  • Comment les informations utilisateur et les droits d'accès doivent-ils être stockés? (modèle de données, emplacement, format)
  • Quels sont les bons modèles de conception pour les représenter et les suivre sur le serveur? (sessions en mémoire, recherches db à chaque fois, etc.)
  • Quels sont les bons modèles pour mapper ces droits aux services de manière sécurisée dans la base de code?
  • Quels choix architecturaux peuvent aider à maintenir le système plus sûr et fiable?
  • Quelles leçons les gens tirent-ils des tranchées?

Je recherche des modèles de conception et des recommandations pour l'architecture logicielle en dehors de toute technologie spécifique.

(Si les technologies importent, je prévois de l'implémenter en utilisant python, twisted et une base de données postgresql)

Allen
la source
On dirait que vous avez juste besoin de quelqu'un pour l'écrire pour vous;)
Martin Blore
Malheureusement, cela ressemble à un chemin. Il semblait juste étrange que cette partie de la pile ne soit décrite nulle part. Même si je pouvais trouver une description de la façon dont un site comme newegg, digg ou même stackoverflow gère les informations d'identification de l'utilisateur et l'accès dans le backend, cela aiderait.
Allen
Avez-vous fait des progrès à ce sujet?
Bryan Agee
Avez-vous pensé à oAuth2 ? Il existe des bibliothèques de serveurs et de clients disponibles dans de nombreuses langues populaires qui devraient faciliter sa mise en œuvre.
Sam

Réponses:

5

OpenAM.

http://forgerock.com/openam.html

Comment les informations utilisateur et les droits d'accès doivent-ils être stockés? (modèle de données, emplacement, format)

Identity Manager. Séparé de tout serveur Web. Basé sur LDAP.

Quels sont les bons modèles de conception pour les représenter et les suivre sur le serveur? (sessions en mémoire, recherches db à chaque fois, etc.)

Résolu par votre cadre. Ne pense plus. Utilisez simplement les bons modèles de conception déjà construits de votre framework.

Quels sont les bons modèles pour mapper ces droits aux services de manière sécurisée dans la base de code?

Résolu par votre cadre. Chaque cadre utilise une approche légèrement différente. Chaque langue a des fonctionnalités légèrement différentes. Django, par exemple, utilise fortement les décorateurs de Python pour cela.

Quels choix architecturaux peuvent aider à maintenir le système plus sûr et fiable?

Plus? Plus que quoi?

S.Lott
la source
Dans ma configuration spécifique, je ne pense pas pouvoir utiliser quelque chose comme OpenAM. Je n'ai pas besoin d'une connexion unique à l'échelle de l'entreprise. Je pense que j'ai besoin de quelque chose de plus petit et de plus autonome.
Allen
@Allen. Nous ne l'utilisons pas pour l'authentification unique à l'échelle de l'entreprise. Nous l'utilisons pour une gestion simple de l'identité.
S.Lott