Comment puis-je corriger les erreurs « Unable to verify secret hash for client <client-id>» liées à une API Amazon Cognito configurée avec mes groupes d’utilisateurs ?

Lecture de 3 minute(s)
0

Lorsque j’essaie d’invoquer une API Amazon Cognito pour mes groupes d’utilisateurs, le message d’erreur « Unable to verify secret hash for client <client-id>» s’affiche. Comment puis-je corriger cette erreur ?

Brève description

Lorsque vous configurez un client d’application de groupe d’utilisateurs avec une clé secrète client dans le groupe d’utilisateurs, vous devez inclure une valeur SecretHash dans l’argument de la requête d’API. Sinon, Amazon Cognito renvoie le message d’erreur « Unable to verify secret hash for 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 messages d’erreur lors de l’exécution des commandes de l’interface de la ligne de commande AWS (AWS CLI), vérifiez que vous utilisez bien la version la plus récente de l’AWS CLI.

Pour créer une valeur SecretHash

Suivez les instructions de la section Calcul des valeurs SecretHash. Vous aurez besoin de l’ID et de la clé secrète de votre client d’application, ainsi que du nom de l’utilisateur de votre groupe d’utilisateurs Amazon Cognito.

-ou-

Pour automatiser le processus, procédez comme suit :

1.    Si cela n’est pas déjà fait, installez Python.

2.    Enregistrez l’exemple de script Python suivant dans 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 : avant d’exécuter l’exemple de script, remplacez les valeurs suivantes : Dans le champ Nom d’utilisateur, entrez le nom de l’utilisateur du groupe d’utilisateurs. Dans le champ app_client_id, entrez l’ID du client d’application de votre groupe d’utilisateurs. Dans le champ Clé, entrez la clé secrète du client d’application.

3.    Exécutez le script à l’aide de la commande suivante :

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

Remarque : avant d’exécuter la commande, remplacez les valeurs suivantes : Si vous utilisez une version de Python antérieure à Python 3.0, remplacez python3 par python. Dans le champ secret_hash.py, entrez le nom de fichier de l’exemple de script. Dans le champ nom d’utilisateur, entrez le nom d’utilisateur du groupe d’utilisateurs. Dans le champ app_client_id, entrez l’ID du client d’application et dans app_client_secret, entrez la clé secrète du client d’application.

La commande renvoie une valeur SecretHash.

Ajout des valeurs SecretHash dans les appels d’API

Remarque : si le client d’application est configuré sans clé secrète, il n’est pas nécessaire d’inclure la valeur SecretHash dans les appels d’API Amazon Cognito. Pour en savoir plus, consultez la section Configuration d’un client d’application pour un groupe d’utilisateurs.

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

Exemple d’appel d’API InitiateAuth comprenant 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 à un appel d’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 d’avoir activé ALLOW_USER_PASSWORD_AUTH.

Exemple d’appel d’API ForgotPassword comprenant un paramètre SECRET_HASH

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

Exemple de réponse à un appel d’API ForgotPassword

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

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