Ich bin beim Prozess "Amazon Cognito Identity-Benutzerpools" festgefahren.
Ich habe alle möglichen Codes zur Authentifizierung des Benutzers in Cognito-Benutzerpools ausprobiert. Ich erhalte jedoch immer die Fehlermeldung "Fehler: Geheimer Hash für Client 4b ******* fd kann nicht überprüft werden".
Hier ist Code:
AWS.config.region = 'us-east-1'; // Region
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'us-east-1:b64bb629-ec73-4569-91eb-0d950f854f4f'
});
AWSCognito.config.region = 'us-east-1';
AWSCognito.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'us-east-1:b6b629-er73-9969-91eb-0dfffff445d'
});
AWSCognito.config.update({accessKeyId: 'AKIAJNYLRONAKTKBXGMWA', secretAccessKey: 'PITHVAS5/UBADLU/dHITesd7ilsBCm'})
var poolData = {
UserPoolId : 'us-east-1_l2arPB10',
ClientId : '4bmsrr65ah3oas5d4sd54st11k'
};
var userPool = new AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool(poolData);
var userData = {
Username : '[email protected]',
Pool : userPool
};
var cognitoUser = new AWSCognito.CognitoIdentityServiceProvider.CognitoUser(userData);
cognitoUser.confirmRegistration('123456', true,function(err, result) {
if (err) {
alert(err);
return;
}
console.log('call result: ' + result);
});
amazon-web-services
amazon-cognito
Ronak Patel
quelle
quelle
Antworten:
Es scheint, dass AWS Cognito derzeit das Kundengeheimnis nicht perfekt handhabt. Es wird in naher Zukunft funktionieren, aber derzeit ist es noch eine Beta-Version.
Für mich funktioniert es gut für eine App ohne Client-Geheimnis, aber für eine App mit einem Client-Geheimnis schlägt dies fehl.
Versuchen Sie also in Ihrem Benutzerpool, eine neue App zu erstellen, ohne ein Client-Geheimnis zu generieren. Verwenden Sie dann diese App, um einen neuen Benutzer anzumelden oder die Registrierung zu bestätigen.
quelle
"When creating the App, the generate client secret box must be unchecked because the JavaScript SDK doesn't support apps that have a client secret."
Laut den Dokumenten: http://docs.aws.amazon.com/cognito/latest/developerguide/setting-up-the-javascript-sdk.html
Das Javascript SDK unterstützt keine Apps mit einem Client Secret.
In den Anweisungen heißt es nun, dass Sie beim Erstellen der App für den Benutzerpool das Kontrollkästchen "Clientgeheimnis generieren" deaktivieren müssen.
quelle
Dies kann einige Jahre zu spät sein, deaktivieren Sie jedoch einfach die Option "Client-Geheimnis generieren" und es funktioniert für Ihre Web-Clients.
quelle
Da alle anderen ihre Sprache gepostet haben, ist hier der Knoten (und er funktioniert im Browser mit
browserify-crypto
, wird automatisch verwendet, wenn Sie Webpack oder browserify verwenden):quelle
Ich hatte das gleiche Problem im .net SDK.
So habe ich es gelöst, falls es jemand anderes braucht:
Die Anmeldung sieht dann so aus:
quelle
Für alle, die AWS Lambda verwenden möchten, um einen Benutzer mit dem AWS JS SDK anzumelden, habe ich folgende Schritte ausgeführt:
Erstellen Sie eine weitere Lambda-Funktion in Python, um den Schlüssel zu generieren:
Rufen Sie die Funktion über die Funktion nodeJS in AWS auf. Die Unterschrift fungierte als geheimer Hash für Cognito
Hinweis: Die Antwort basiert stark auf der Antwort von George Campbell unter folgendem Link: Berechnung eines SHA-Hashs mit einer Zeichenfolge + einem geheimen Schlüssel in Python
quelle
Lösung für
golang
. Scheint so, als sollte dies dem SDK hinzugefügt werden.quelle
Lösung für NodeJS mit SecretHash
Es scheint albern, dass AWS den geheimen Schlüssel aus dem SDK entfernt hat, da er in NodeJS nicht verfügbar gemacht wird.
Ich habe es in NodeJS zum Laufen gebracht, indem ich Fetch abgefangen und den Hash-Schlüssel mithilfe der Antwort von @Simon Buchan hinzugefügt habe .
cognito.js
fetch-inceptor.js (Forked und bearbeitet für NodeJS von Fork von https://github.com/werk85/fetch-intercept/blob/develop/src/index.js )
quelle
In Java können Sie diesen Code verwenden:
quelle
Amazon erwähnt in seiner Dokumentation mit Java-Anwendungscode, wie SecretHash-Werte für Amazon Cognito berechnet werden. Hier funktioniert dieser Code mit dem Boto 3 Python SDK .
Sie finden Ihr
App clients
Menü auf der linken Seite unterGeneral settings
. Holen Sie sich dieseApp client id
undApp client secret
zu erstellenSECRET_HASH
. Zum besseren Verständnis habe ich alle Ausgaben jeder einzelnen Zeile auskommentiert.In der Boto 3- Dokumentation sehen wir viel Zeit zum Nachfragen
SECRET_HASH
. Die obigen Codezeilen helfen Ihnen also, dies zu erstellenSECRET_HASH
.Wenn Sie nicht verwenden möchten,
SECRET_HASH
deaktivieren Sie einfachGenerate client secret
beim Erstellen einer App.quelle
app_client_id
undusername
. Aber ich zeige die korrekte Ausgabe als Kommentar an, der gemäß demusername
+ angezeigt wirdapp_client_id
. Immer wieder vielen Dank.Dies ist ein Beispiel-PHP-Code, mit dem ich den geheimen Hash generiere
In diesem Fall ist das Ergebnis:
quelle
Für JAVA und .NET müssen Sie das Geheimnis in den Auth-Parametern mit dem Namen übergeben
SECRET_HASH
.Und es sollte funktionieren.
quelle
C ++ mit dem Qt Framework
quelle
Möglicherweise gibt es eine kompaktere Version, aber dies funktioniert für Ruby, insbesondere in Ruby on Rails, ohne dass etwas erforderlich ist:
quelle
Cognito-Authentifizierung
Fehler: Der App-Client ist nicht für geheim konfiguriert, aber es wurde ein geheimer Hash empfangen
Die Bereitstellung von secretKey als Null hat für mich funktioniert. Zu den bereitgestellten Anmeldeinformationen gehören: -
AWSCognitoUserPoolsSignInProviderKey (AccessKeyId)
Alle oben genannten Dinge funktionieren mit dem unten verlinkten Codebeispiel.
AWS-Beispielcode: https://github.com/awslabs/aws-sdk-ios-samples/tree/master/CognitoYourUserPools-Sample/Swift
Lassen Sie mich wissen, wenn das bei Ihnen nicht funktioniert.
quelle
Hier ist mein 1 Befehl und es funktioniert (Bestätigt :))
quelle