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"
}
}