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.
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é.
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.
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.
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.