Wie behebe ich die Fehler „Der geheime Hash für den Client kann nicht verifiziert werden<client-id>“ in meiner Amazon Cognito-Benutzerpool-API?

Lesedauer: 3 Minute
0

Wenn ich versuche, meine Amazon Cognito-Benutzerpool-API aufzurufen, erhalte ich die Fehlermeldung „Der geheime Hash für den Client kann nicht überprüft werden<client-id>“. Wie behebe ich den Fehler?

Kurzbeschreibung

Wenn ein Benutzerpool-App-Client mit einem geheimen Client-Schlüssel im Benutzerpool konfiguriert ist, ist ein SecretHash-Wert im Abfrageargument der API erforderlich. Wenn im APIs-Abfrageargument kein geheimer Hash bereitgestellt wird, gibt Amazon Cognito den Fehler **Geheimer Hash für Client konnte nicht überprüft werden <client-id>**Fehler.

Das folgende Beispiel zeigt, wie Sie einen SecretHash-Wert erstellen und ihn entweder in einen InitiateAuth oder ForgotPassword API-Aufruf einbeziehen.

Behebung

**Hinweis:**Wenn Sie beim Ausführen von Befehlen der AWS Command Line Interface (AWS CLI) Fehler erhalten, stellen Sie sicher, dass Sie die neueste AWS CLI-Version verwenden.

Um einen SecretHash-Wert zu erstellen

Folgen Sie den Anweisungen unter SecretHash-Werte berechnen. Sie benötigen Ihre App-Client-ID, den App-Client-Schlüssel und den Benutzernamen des Benutzers in Ihrem Amazon Cognito-Benutzerpool.

-oder-

Gehen Sie wie folgt vor, um den Prozess zu automatisieren:

1.Falls Sie dies noch nicht getan haben, installieren Sie Python.

2.Speichern Sie das folgende Python-Beispielskript als .py-Datei:

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)

**Hinweis:**Ersetzen Sie die folgenden Werte, bevor Sie das Beispielskript ausführen: Geben Sie als Benutzername den Benutzernamen des Benutzers im Benutzerpool ein. Geben Sie für app_client_id die App-Client-ID Ihres Benutzerpools ein. Geben Sie als Schlüssel das Geheimnis Ihres App-Clients ein.

3.Führen Sie den folgenden Befehl aus, um das Skript auszuführen:

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

**Hinweis:**Ersetzen Sie die folgenden Werte, bevor Sie den Befehl ausführen: Wenn Sie eine Version von Python vor Python 3.0 ausführen, ersetzen Sie python3 durch python. Geben Sie für secret_hash.py den Dateinamen des Beispielskripts ein. Geben Sie als Nutzername den Benutzerpool-Benutzernamen ein. Geben Sie für app_client_id Ihre App-Client-ID ein. Geben Sie für app_client_secret den geheimen Schlüssel Ihres App-Clients ein.

Die Befehlsantwort gibt einen SecretHash-Wert zurück.

Um SecretHash-Werte in API-Aufrufe aufzunehmen

**Hinweis:**Ein SecretHash-Wert ist in Amazon Cognito-API-Aufrufen nicht erforderlich, wenn Ihr App-Client nicht mit einem geheimen App-Client-Schlüssel konfiguriert ist. Weitere Informationen finden Sie unter Konfiguration eines Benutzerpool-App-Clients.

Fügen Sie den SecretHash-Wert, den Sie als SECRET_HASH-Parameter erstellt haben, zu den Abfragezeichenfolgenparametern des API-Aufrufs hinzu.

Beispiel für einen InitiateAuth-API-Aufruf, der einen SECRET\ _HASH-Parameter enthält

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

Die Beispielantwort des API-Aufrufs InitiateAuth

{
    "ChallengeParameters": {},

    "AuthenticationResult": {
        "AccessToken": "<HIDDEN>",
        "ExpiresIn": 3600,
        "TokenType":
    "Bearer",

        "RefreshToken": "<HIDDEN>",
        "IdToken": "<HIDDEN>"
    }
}

**Hinweis:**Wenn Sie den Authentifizierungsablauf USER_PASSWORD_AUTH verwenden, stellen Sie sicher, dass ALLOW_USER_PASSWORD_AUTH aktiviert ist.

Beispiel für einen ForgotPassword API-Aufruf, der einen SECRET_HASH-Parameter enthält

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

Beispiel für eine Antwort auf einen ForgotPassword API-Aufruf

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

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 3 Jahren