Come posso risolvere gli errori "Unable to verify secret hash for client" ricevuti dall'API dei pool di utenti in Amazon Cognito?
Quando provo ad accedere all'API dei pool di utenti di Amazon Cognito, ricevo l'errore "Unable to verify secret hash for client". Desidero risolvere questo problema.
Risoluzione
Quando nella configurazione del client di app del tuo pool di utenti scegli il tipo segreto client, devi includere un valore hash segreto nel parametro di query dell'API. Se non includi un valore hash segreto, Amazon Cognito restituisce l'errore Unable to verify secret hash for client.
Per risolvere il problema, calcola il valore hash segreto. Quindi includi il valore quando invochi API di Amazon Cognito che accettano hash segreti, come InitiateAuth o ForgotPassword.
Nota: se ricevi errori durante l’esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori per AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.
Calcola un valore hash segreto
Per calcolare il tuo valore hash segreto, devi disporre delle seguenti informazioni:
- ID del client di app
- Segreto del client di app
- Nome utente dell'utente facente parte del tuo pool di utenti Amazon Cognito
Per automatizzare il processo, completa i seguenti passaggi:
- Scarica l'ultima versione di Python per Windows dal sito web di Python. Quindi installa Python sul tuo computer locale.
- Salva lo script Python dell'esempio seguente come file .py. Ad esempio, puoi salvare il file come secret_hash.py. Lo script seguente utilizza il segreto client dell'applicazione come chiave e la funzione hash SHA256 per mostrare il calcolo di un digest HMAC:
Nota: sostituisci username con il nome utente dell'utente facente parte del pool di utenti. Inoltre, sostituisci app_client_id con l'ID client di app del tuo pool di utenti e key con il segreto del tuo client di app.import sys, hmac, hashlib, base64 # Unpack command line arguments username, app_client_id, key = sys.argv[1:4] # Create message and key bytes message, key = (username + app_client_id).encode('utf-8'), key.encode('utf-8') # Calculate secret hash secret_hash = base64.b64encode(hmac.new(key, message, digestmod=hashlib.sha256).digest()).decode() print(f"Secret Hash for user '{username}': {secret_hash}")
- Per ottenere il valore hash segreto, esegui il comando seguente:
Nota: se stai utilizzando una versione di Python precedente a Python 3.0, sostituisci python3 con python. Sostituisci secret_hash.py con il nome del tuo file, username con il nome utente dell'utente facente parte del pool di utenti, app_client_id con l'ID del tuo client di app e app_client_secret con il segreto del tuo client di app.python3 secret_hash.py username app_client_id app_client_secret
Includi i valori hash segreti nelle chiamate API
Aggiungi il tuo valore hash segreto come parametro SECRET_HASH nei parametri della stringa di query della chiamata API.
Esempio di chiamata API InitiateAuth che include un parametro SECRET_HASH:
aws cognito-idp initiate-auth --auth-flow USER_PASSWORD_AUTH --auth-parameters USERNAME=username,PASSWORD=password,SECRET_HASH=secret_hash --client-id example_client-id
Esempio di output della chiamata API InitiateAuth:
{ "ChallengeParameters": {}, "AuthenticationResult": { "AccessToken": "<HIDDEN>", "ExpiresIn": 3600, "TokenType": "Bearer", "RefreshToken": "<HIDDEN>", "IdToken": "<HIDDEN>" } }
Nota: se utilizzi il flusso di autenticazione USER_PASSWORD_AUTH, attiva ALLOW_USER_PASSWORD_AUTH per il client di app.
Esempio di chiamata API ForgotPassword che include un parametro SECRET_HASH:
aws cognito-idp forgot-password --client-id example_client-id --username example_username --secret-hash example_secret-hash
Nota: sostituisci username con il tuo nome utente e secret-hash con il tuo valore hash segreto.
Esempio di output della chiamata API ForgotPassword:
{ "CodeDeliveryDetails": { "Destination": "+***********", "DeliveryMedium": "SMS", "AttributeName": "phone_number" } }

Contenuto pertinente
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 2 anni fa