New user sign up using AWS Builder ID
New user sign up using AWS Builder ID is currently unavailable on re:Post. To sign up, please use the AWS Management Console instead.
Wie behebe ich die Fehler „Unable to verify secret hash for client“ in meiner Amazon Cognito-Benutzerpool-API?
Wenn ich versuche, auf meine Amazon Cognito-Benutzerpool-API zuzugreifen, erhalte ich die Fehlermeldung „Unable to verify secret hash for client“. Ich möchte dieses Problem beheben.
Lösung
Wenn du deinen Benutzerpool-App-Client als Client-Secret konfigurierst, musst du einen Secret-Hash-Wert in den Abfrageparameter der API aufnehmen. Wenn du keinen Secret-Hash-Wert angibst, gibt Amazon Cognito die Fehlermeldung Unable to verify secret hash for client zurück.
Berechne den Secret-Hash-Wert, um das Problem zu lösen. Füge dann den Wert ein, wenn du Amazon Cognito APIs aufrufst, die einen Secret-Hash akzeptieren, wie InitiateAuth oder ForgotPassword.
Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei der AWS CLI. Stelle außerdem sicher, dass du die neueste Version von AWS CLI verwendest.
Einen Secret-Hash-Wert berechnen
Zur Berechnung des Secret-Hash-Werts benötigst du die folgenden Informationen:
- App-Client-ID
- App-Client-Secret
- Benutzername des Benutzers, der sich in deinem Amazon Cognito-Benutzerpool befindet
Führe die folgenden Schritte aus, um den Prozess zu automatisieren:
- Lade die neueste Version von Python für Windows von der Python-Website herunter. Installiere dann Python auf deinem lokalen Computer.
- Speichere das folgende Python-Beispielskript als .py-Datei. Du kannst die Datei zum Beispiel als secret_hash.py speichern. Das folgende Skript verwendet das Client-Secret der Anwendung als Schlüssel und die Hash-Funktion SHA256, um die Berechnung eines HMAC-Digests zu zeigen:
Hinweis: Ersetze username durch den Benutzernamen des Benutzers, der sich im Benutzerpool befindet. Ersetze außerdem app_client_id durch die App-Client-ID deines Benutzerpools und key durch das App-Client-Secret.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}")
- Führe den folgenden Befehl aus, um den Secret-Hash-Wert zu ermitteln:
Hinweis: Wenn du eine frühere Version von Python als Python 3.0 verwendest, ersetze python3 durch python. Ersetze secret_hash.py durch deinen Dateinamen, username durch den Benutzernamen des Benutzerpools, app_client_id durch deine App-Client-ID und app_client_secret durch das App-Client-Secret.python3 secret_hash.py username app_client_id app_client_secret
Secret-Hash-Werte in API-Aufrufe aufnehmen
Füge deinen Secret-Hash-Wert als SECRET_HASH-Parameter zu den Abfragezeichenfolgenparametern des API-Aufrufs ein.
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 example_client-id
Beispielausgabe des API-Aufrufs InitiateAuth:
{ "ChallengeParameters": {}, "AuthenticationResult": { "AccessToken": "<HIDDEN>", "ExpiresIn": 3600, "TokenType": "Bearer", "RefreshToken": "<HIDDEN>", "IdToken": "<HIDDEN>" } }
Hinweis: Wenn du den USER_PASSWORD_AUTH-Authentifizierungsablauf verwendest, aktiviere ALLOW_USER_PASSWORD_AUTH für den App-Client.
Beispiel für einen ForgotPassword API-Aufruf, der einen SECRET_HASH-Parameter enthält:
aws cognito-idp forgot-password --client-id example_client-id --username example_username --secret-hash example_secret-hash
Hinweis: Ersetze username durch deinen Benutzernamen und secret-hash durch deinen Secret-Hash-Wert.
Beispielausgabe des API-Aufrufs ForgotPassword:
{ "CodeDeliveryDetails": { "Destination": "+***********", "DeliveryMedium": "SMS", "AttributeName": "phone_number" } }

Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 3 Monaten
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor 4 Jahren
- AWS OFFICIALAktualisiert vor 3 Monaten