web-dev-qa-db-fra.com

Dois-je utiliser AWS Cognito "nom d'utilisateur" ou "sub" (uid) pour le stockage dans la base de données?

J'ai un utilisateur authentifié dans le service AWS Cognito et je souhaite stocker son identifiant unique dans la base de données. Dois-je stocker le nom d'utilisateur de l'utilisateur (c'est son numéro de téléphone) ou son "sub" (c'est son uid)? Toutes les fonctions de l'API Amazon comme AdminGetUser utilisent le paramètre "username", mais pas sub/uid.

Mais j'ai aussi lu que article et l'auteur a dit "Générez toujours la politique sur la valeur de la revendication" sub "et non pour" username "car le nom d'utilisateur est réassignable. Sub est UUID pour un utilisateur qui n'est jamais réaffecté à un autre utilisateur. "

Donc, maintenant j'hésite à ce que je dois utiliser comme identifiant utilisateur unique - "nom d'utilisateur" ou "sous"

Je vous remercie.

19
lexa

Vous devez utiliser l'attribut sub. En fait, si un utilisateur avec le nom d'utilisateur Erico supprime son compte, un nouvel utilisateur peut utiliser ce même nom d'utilisateur plus tard et votre mappage sera incorrect ...

Un nom d'utilisateur est toujours requis pour enregistrer un utilisateur et il ne peut pas être modifié après la création d'un utilisateur.

Toutefois

Le nom d'utilisateur doit être unique dans un pool d'utilisateurs. Un nom d'utilisateur peut être réutilisé, mais uniquement après avoir été supprimé et n'est plus utilisé.

Mettre à jour

Vous pouvez utiliser le sub comme ID et l'attribut username comme attribut dans votre base de données. Cela vous permettra d'obtenir un utilisateur par son username avec AdminGetUser.

Si vous avez vraiment besoin du username comme ID dans votre base de données, vous pouvez soit supprimer l'utilisateur de votre base de données lorsque son compte est supprimé, soit utiliser le déclencheur "Préinscription" pour empêcher un utilisateur d'utiliser un username déjà dans la base de données.

13
user108828

L'une des limitations actuelles ( à cette date ) de Cognito est la liste des utilisateurs, si vous enregistrez le sub dans votre propre base de données pour identifier vos utilisateurs, et plus tard, vous essayez de récupérer les informations de cet utilisateur enregistré à partir de cognito n'est pas possible, car aws ne permet pas le filtrage par sous-attribut ou attributs personnalisés , utilisez donc username pour enregistrer un uuid et prefered_username comme alias pour le vrai nom d'utilisateur.

En javascript AWS.CognitoIdentityServiceProvider.ListUser , idem pour les autres.

2
user2976753

Si vous ne voulez en stocker qu'un, le sous-marin est probablement le chemin à parcourir pour les raisons que vous avez fournies.

Cela dépend beaucoup de votre cas d'utilisation, mais si vous devez utiliser cette base de données pour appeler des API comme votre exemple, garder une trace des deux/un mappage entre les deux est une solution totalement valable.

1
Jeff Bailey