Comment résoudre les erreurs « Impossible de vérifier le hachage secret pour le client <client-id> » de mon API de groupes d'utilisateurs Amazon Cognito ?

Lecture de 3 minute(s)
0

Lorsque j'essaie d'appeler mon API de groupes d'utilisateurs Amazon Cognito, j'obtiens une erreur « Impossible de vérifier le hachage secret pour le client <client-id> ». Comment puis-je corriger ce problème ?

Brève description

Lorsqu'un client d'application de groupe d'utilisateurs est configuré avec un secret client dans le groupe d'utilisateurs, une valeur SecretHash est nécessaire dans l'argument de requête de l'API. Si aucun hachage secret n'est pas fourni dans l'argument de requête API, Amazon Cognito renvoie une erreur Impossible de vérifier le hachage secret pour le client <client-id>.

L'exemple suivant montre comment créer une valeur SecretHash et l'inclure dans un appel d'API InitiateAuth ou ForgotPassword.

Résolution

Remarque : si vous recevez des erreurs lors de l'exécution de commandes depuis l'interface de ligne de commande AWS (AWS CLI), vérifiez que vous utilisez la version la plus récente d'AWS CLI.

Pour créer une valeur SecretHash

Suivez les instructions de la section Calcul de valeurs SecretHash. Vous aurez besoin de votre ID client d'application, du secret client de l'application et du nom d'utilisateur de l'utilisateur dans votre pool d'utilisateurs Amazon Cognito.

-ou-

Pour automatiser le processus, procédez comme suit :

1.    Si vous ne l'avez pas encore fait, installez Python.

2.    Enregistrez l'exemple de script Python suivant sous la forme d'un fichier .py :

import sys
import hmac, hashlib, base64

username = sys.argv[1]
app_client_id = sys.argv[2]
key = sys.argv[3]
message = bytes(sys.argv[1]+sys.argv[2],'utf-8')
key = bytes(sys.argv[3],'utf-8')
secret_hash = base64.b64encode(hmac.new(key, message, digestmod=hashlib.sha256).digest()).decode()

print("SECRET HASH:",secret_hash)

Remarque : remplacez les valeurs suivantes avant d'exécuter l'exemple de script : pour username, entrez le nom d'utilisateur de l'utilisateur dans le groupe d'utilisateurs. Pour app_client_id, entrez l'ID du client d'application de votre groupe d'utilisateurs. Pour key, entrez le secret de votre client d'application.

3.    Exécutez la commande suivante pour exécuter le script :

python3 secret_hash.py <username> <app_client_id> <app_client_secret>

Remarque : remplacez les valeurs suivantes avant d'exécuter la commande : si vous exécutez une version de Python antérieure à Python 3.0, remplacez python3 par python. Pour secret_hash.py, entrez le nom de fichier de l'exemple de script. Pour username, entrez le nom d'utilisateur du groupe d'utilisateurs. Pour app_client_id, entrez votre ID client d'application Pour app_client_secret, entrez le secret de votre client d'application.

La réponse de la commande renvoie une valeur SecretHash.

Pour inclure des valeurs SecretHash dans des appels API

Remarque : une valeur SecretHash n'est pas nécessaire dans les appels API Amazon Cognito si votre client d'application n'est pas configuré avec un secret client d'application. Pour plus d'informations, consultez Configuration d'un client d'application pour groupe d'utilisateurs.

Ajoutez la valeur SecretHash que vous avez créée en tant que paramètre SECRET_HASH dans les paramètres de chaîne de requête de l'appel API.

Exemple d'appel API InitiateAuth incluant un paramètre SECRET_HASH

$ aws cognito-idp initiate-auth --auth-flow USER_PASSWORD_AUTH --auth-parameters USERNAME=<username>,PASSWORD=<password>,SECRET_HASH=<secret_hash> --client-id <client-id>

Exemple de réponse à l'appel API InitiateAuth

{
    "ChallengeParameters": {},
    
    "AuthenticationResult": {
        "AccessToken": "<HIDDEN>",
        "ExpiresIn": 3600,
        "TokenType":
    "Bearer",
    
        "RefreshToken": "<HIDDEN>",
        "IdToken": "<HIDDEN>"
    }
}

Remarque : si vous utilisez le flux d'authentification USER_PASSWORD_AUTH, assurez-vous que ALLOW_USER_PASSWORD_AUTH est activé.

Exemple d'appel API ForgotPassword incluant un paramètre SECRET_HASH

$ aws cognito-idp forgot-password --client-id <client-id> --username <username> --secret-hash <secret-hash>

Exemple de réponse à l'appel API ForgotPassword

{
    "CodeDeliveryDetails": {
        "Destination": "+***********",
        "DeliveryMedium": "SMS",
        "AttributeName": "phone_number"
    }
}

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 3 ans