web-dev-qa-db-fra.com

Authentification multi-locataire avec AWS Cognito

Mon projet actuel est dans AWS, utilisant Cognito et des microservices avec Lambda. Nous avons conçu les microservices à l'aide de DDD et nous sommes en train de mettre en œuvre des fonctionnalités de base.

Cependant, les utilisateurs de l'API ont besoin de pouvoir être classés dans l'entreprise cliente pour laquelle ils travaillent et ne peuvent accéder qu'aux données de cette entreprise cliente ainsi qu'à toute authentification basée sur les rôles que nous aurons.

Ce n'est pas une solution multi-locataire complète car chaque utilisateur travaillera avec le même site Web, mais son compte aura été associé à un client particulier.

Tout ce que j'ai lu à propos de faire quelque chose comme ça dans AWS suggère d'utiliser un rôle d'utilisateur ou un pool par client et d'y associer des utilisateurs lors de leur création, mais nous ne voulons pas le faire, car les clients se composent généralement de 2-3 utilisateurs et il y a beaucoup de clients. Cela deviendrait rapidement impossible à gérer en termes de nombre de pools d'utilisateurs.

J'ai essayé de trouver des moyens de contourner ce problème en utilisant des moyens "conventionnels", tels que l'ajout d'un service de domaine dans l'architecture qui a été uniquement conçu pour ajouter des données client à chaque demande d'un utilisateur particulier en appelant le microservice utilisateur, mais cela semble excessif complexe. J'ai également envisagé de modifier l'architecture pour inclure des informations de base sur les utilisateurs et les rôles dans chaque microservice, mais cela semble compliqué.

Ma question est la suivante: existe-t-il des moyens officiellement pris en charge pour ajouter des données dans un profil AWS Cognito par programme, et de telle manière que cela puisse être modifié via un site Web frontal par un administrateur client après la création du compte? Même s'il ne s'agit que d'un champ clientId dans le jeton.

Sinon, que recommanderait toute personne ayant rencontré un problème similaire comme alternative à la suggestion de pools d'utilisateurs.

Je vous remercie.

MODIFIER:

J'ai également étudié plusieurs façons de le faire en utilisant des attributs sur les profils Cognito, comme mentionné ici . Il semble que c'est la façon de faire plus ou moins ce que j'essaie de réaliser, mais j'aimerais quand même entendre parler d'alternatives ou de conseils.

11
GallJ93

La solution que nous utiliserons pour ce problème sera d'utiliser des attributs personnalisés dans le cadre de la configuration utilisateur de Cognito. Nous aurons des champs de texte pour les attributs ou groupes supplémentaires auxquels l'utilisateur appartient.

La façon dont cela devrait être mis en œuvre peut être trouvée sur les liens suivants:

Ces données étant automatiquement transmises à chaque service dans le cadre des informations d'identification Cognito, nous serons en mesure de vérifier que l'utilisateur possède les informations d'identification valides pour accéder aux données spécifiques à chaque client.

Voici des exemples d'utilisation de Cognito dans une application NodeJS (parfois sans serveur):

https://serverless-stack.com/chapters/login-with-aws-cognito.html

https://serverless-stack.com/chapters/add-a-create-note-api.html#configure-the-api-endpoint

Cela semble être plus facile à réaliser en utilisant le package aws-amplify , qui est principalement conçu pour l'authentification frontale, mais qui peut être utilisé dans NodeJS pour l'authentification principale comme spécifié ici .

18
GallJ93