Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
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" } }
- Tags
- Amazon Cognito
- Sprache
- Deutsch

Relevanter Inhalt
AWS OFFICIALAktualisiert vor 6 Monaten
AWS OFFICIALAktualisiert vor 2 Monaten