Come posso risolvere gli errori "Unable to verify secret hash for client<client-id>" ricevuti dall'API dei pool di utenti in Amazon Cognito?

3 minuti di lettura
0

Quando provo a richiamare l'API dei pool di utenti Amazon Cognito, viene visualizzato l'errore "Unable to verify secret hash for client<client-id>". Come posso risolvere il problema?

Breve descrizione

Se un client dell'app del pool di utenti è configurato con un segreto del client nel pool di utenti, è necessario utilizzare un valore SecretHash nell'argomento della query dell'API. Se non si fornisce un valore Secret Hash nell'argomento della query delle API, Amazon Cognito visualizzerà l'errore Unable to verify secret hash for client <client-id>.

L'esempio seguente mostra come creare un valore SecretHash e includerlo in una chiamata API InitiateAuth o ForgotPassword.

Risoluzione

Nota: se si verificano errori durante l'esecuzione dei comandi dell'Interfaccia della linea di comando AWS (AWS CLI), assicurati di utilizzare la versione più recente di AWS CLI.

Creazione di un valore SecretHash

Segui le istruzioni riportate nella pagina Calcolo dei valori SecretHash. Avrai bisogno dell'ID del client dell'app, del segreto del client dell'app e del nome utente dell'utente presente nel pool di utenti Amazon Cognito.

-oppure-

Per automatizzare il processo procedi come indicato di seguito:

1.    Se non l'hai già fatto, installa Python.

2.    Salva lo script Python dell'esempio seguente come file .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)

Nota: prima di eseguire lo script dell'esempio, sostituisci i seguenti valori: In username, inserisci il nome utente dell'utente presente nel pool di utenti. In app_client_id, inserisci l'ID del client dell'app del pool di utenti. In key, inserisci il segreto del client dell'app.

3.    Esegui il comando seguente per eseguire lo script:

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

Nota: sostituisci i seguenti valori prima di eseguire il comando: Se stai usando una versione di Python precedente a Python 3.0, sostituisci python3 con python. In secret_hash.py, inserisci il nome del file dello script dell'esempio. In username, inserisci il nome utente del pool di utenti. In app_client_id, inserisci l'ID del client dell'app. In app_client_secret, inserisci il segreto del client dell'app.

La risposta al comando restituirà un valore SecretHash.

Inclusione dei valori SecretHash nelle chiamate API

Nota: non è richiesto un valore SecretHash nelle chiamate API di Amazon Cognito se il client dell'app non è configurato con un segreto. Per ulteriori informazioni, consulta la pagina Configuring a user pool app client.

Aggiungi il valore SecretHash che hai creato 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 <client-id>

Esempio di risposta alla 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, assicurati che ALLOW_USER_PASSWORD_AUTH sia attivato.

Esempio di chiamata API ForgotPassword che include un parametro SECRET_HASH

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

Esempio di risposta alla chiamata API ForgotPassword

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

AWS UFFICIALE
AWS UFFICIALEAggiornata 3 anni fa