En utilisant AWS re:Post, vous acceptez les AWS re:Post Conditions d’utilisation

Comment puis-je modifier les attributs d’un groupe d’utilisateurs Amazon Cognito après sa création ?

Lecture de 6 minute(s)
0

J’ai créé un groupe d’utilisateurs Amazon Cognito et souhaite à présent modifier les attributs standard requis pour l’enregistrement des utilisateurs.

Brève description

Vous ne pouvez pas modifier les attributs standard d’un groupe d’utilisateurs après sa création. En revanche, vous pouvez créer un nouveau groupe d’utilisateurs avec les attributs que vous souhaitez demander pour l’enregistrement de l’utilisateur. Ensuite, utilisez une fonction AWS Lambda comme déclencheur de migration des utilisateurs pour migrer les utilisateurs existants vers le nouveau groupe d’utilisateurs.

Remarque : vous pouvez ajouter des attributs personnalisés à un groupe d’utilisateurs existant. Cependant, ces attributs ne sont pas obligatoires pour l’enregistrement des utilisateurs.

Résolution

Configurez un nouveau groupe d’utilisateurs avec différents attributs

Créez un nouveau groupe d’utilisateurs. Ensuite, avant de sélectionner Créer un groupe, modifiez les attributs standard selon vos préférences.

Important : si vous spécifiez de nouveaux attributs obligatoires dans le groupe d’utilisateurs, concevez votre fonction Lambda pour fournir ces nouveaux attributs au nouveau groupe d’utilisateurs. Si vous ne concevez pas la fonction Lambda pour fournir les nouveaux attributs, l’authentification échoue lors de la migration des utilisateurs. Supposons, par exemple, que votre ancien groupe d’utilisateurs n’exigeait qu’une adresse e-mail, mais que votre nouveau groupe d’utilisateurs nécessite à la fois une **adresse e-mail ** et un numéro de téléphone. Dans ce cas, transmettez les valeurs d’attribut du numéro de téléphone à votre nouveau groupe d’utilisateurs pour garantir l’authentification des utilisateurs.

Créer une fonction Lambda

Pour créer une fonction Lambda de migration des utilisateurs, utilisez l’éditeur de la console Lambda ou créez et téléchargez votre propre package de déploiement.

Important : ce code d’exemple ne fonctionne pas pour migrer les utilisateurs qui utilisent l’authentification multifactorielle (MFA) dans l’ancien groupe d’utilisateurs.

Pour tester vos configurations, utilisez l’exemple de fonction suivant en Python :

# Copyright 2018-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
# Permission is hereby granted, free of charge, to any person obtaining a copy of this
# software and associated documentation files (the "Software"), to deal in the Software
# without restriction, including without limitation the rights to use, copy, modify,
# merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

import json
import boto3

client = boto3.client('cognito-idp')

def lambda_handler(event, context):
   if (event['triggerSource'] == 'UserMigration_Authentication'):
     user = client.admin_initiate_auth(
       UserPoolId='<user pool id of the user pool where the user already exists>',
       ClientId='<app client id of the user pool where the user already exists>',
       AuthFlow='ADMIN_NO_SRP_AUTH',
       AuthParameters={
         'USERNAME': event['userName'],
         'PASSWORD': event['request']['password']
       }
     )
        if (user):
       userAttributes = client.get_user(
         AccessToken=user['AuthenticationResult']['AccessToken']
       )
       for userAttribute in userAttributes['UserAttributes']:
         if userAttribute['Name'] == 'email':
           userEmail = userAttribute['Value']
           #print(userEmail)
           event['response']['userAttributes'] = {
             "email": userEmail,
             "email_verified": "true"
           }
          event['response']['messageAction'] = "SUPPRESS"
       print (event)
       return (event)
     else:
       return('Bad Password')
   elif (event["triggerSource"] == "UserMigration_ForgotPassword"):
     user = client.admin_get_user(
       UserPoolId='<user pool id of the user pool where the already user exists>',
       Username=event['userName']
     )
     if (user):
       for userAttribute in user['UserAttributes']:
         if userAttribute['Name'] == 'email':
           userEmail = userAttribute['Value']
           print(userEmail)
           event['response']['userAttributes'] = {
             "email": userEmail,
             "email_verified": "true"
           }
       event['response']['messageAction'] = "SUPPRESS"
          print (event)
       return (event)
     else:
       return('Bad Password')
          else:
     return('there was an error')

Remarque : remplacez UserPoolId par l’ID de l’ancien groupe d’utilisateurs. Recherchez l’identifiant dans la console Amazon Cognito, sur la page de gestion du groupe d’utilisateurs, dans l’onglet Paramètres généraux. Remplacez ClientId par l’identifiant du client de l’application de l’ancien groupe d’utilisateurs. Recherchez l’identifiant du client de l’application dans la console Amazon Cognito sous Clients de l’application.

Ajouter un déclencheur de migration d’utilisateurs au nouveau groupe d’utilisateurs

Dans la console Amazon Cognito, définissez votre nouvelle fonction Lambda en tant que déclencheur Lambda de migration d’utilisateurs. Pour en savoir plus, consultez Ajouter un déclencheur Lambda pour un groupe d’utilisateurs.

Activer le flux USER_PASSWORD_AUTH pour la migration des utilisateurs

Configurez votre client de l’application pour le groupe d’utilisateurs afin d’utiliser le flux d’authentification USER_PASSWORD_AUTH au moment de la migration. Ce flux d’authentification permet à votre application de transmettre le nom d’utilisateur et le mot de passe de l’utilisateur à la fonction Lambda. Le flux d’authentification peut ensuite authentifier l’utilisateur à partir du groupe d’utilisateurs existant.

Ajoutez une logique à votre application pour changer le flux d’authentification par défaut en flux USER_PASSWORD_AUTH. Veillez à ce que la logique modifie le flux d’authentification pour les tentatives de connexion pour lesquelles l’utilisateur existe dans l’ancien groupe d’utilisateurs, mais pas dans le nouveau.

Par exemple, si votre application utilise JavaScript, spécifiez cognitoUser.setAuthenticationFlowType comme USER_PASSWORD_AUTH.

Remarque : une fois que vos utilisateurs ont migré, une bonne pratique consiste à modifier le flux d’authentification de votre application en USER_SRP_AUTH. Ce flux utilise le protocole SRP (Secure Remote Password) pour authentifier les utilisateurs sans qu’il soit nécessaire d’envoyer les mots de passe sur le réseau. Ce flux offre également des avantages en termes de sécurité par rapport au flux USER_PASSWORD_AUTH.

cognitoUser.setAuthenticationFlowType('USER_PASSWORD_AUTH');
    cognitoUser.authenticateUser(authenticationDetails, {
        onSuccess: function(result) {
            // User authentication was successful
        },
        onFailure: function(err) {
            // User authentication was not successful
        },
        mfaRequired: function (codeDeliveryDetails) {
            // MFA is required to complete user authentication.
            // Get the code from user and call
            cognitoUser.sendMFACode(verificationCode, this);
        }
    });

Tester la configuration

Utilisez l’interface Web hébergée Amazon Cognito pour vous connecter à votre application et tester le flux d’authentification. L’utilisateur avec lequel vous vous connectez est authentifié auprès du nouveau groupe d’utilisateurs, puis il est migré.

Remarque : si vous n’avez pas de compte utilisateur avec lequel vous connecter pour tester vos configurations, alors créez un nouvel utilisateur.

Résoudre les problèmes

Si vous obtenez un message d’erreur de type « Exception during user migration » pendant que vous testez, activez les instructions de journalisation depuis Lambda. Ce paramètre enregistre les paramètres d’un déclencheur Lambda de migration d’utilisateur dans Amazon CloudWatch Logs. Reproduisez l’erreur, puis examinez les journaux à la recherche d’éventuels problèmes liés aux paramètres ou d’erreurs de syntaxe dans le déclencheur Lambda de migration des utilisateurs.

Informations connexes

Personnalisation des flux de travail du groupe d’utilisateurs avec des déclencheurs Lambda

Quelle est la différence entre les groupes d’utilisateurs Amazon Cognito et les groupes d’identités ?

Groupes d’utilisateurs

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 7 mois