Utknąłem w procesie „Pule użytkowników Amazon Cognito Identity”.
Wypróbowałem wszystkie możliwe kody do uwierzytelniania użytkownika w puli użytkowników cognito. Ale zawsze pojawia się komunikat o błędzie: „Błąd: nie można zweryfikować tajnego skrótu klienta 4b ******* fd”.
Oto kod:
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
źródło
źródło
Odpowiedzi:
Wygląda na to, że obecnie AWS Cognito nie radzi sobie doskonale z tajemnicą klienta. Będzie działać w najbliższej przyszłości, ale na razie jest to nadal wersja beta.
Dla mnie działa dobrze w przypadku aplikacji bez klucza klienta, ale nie działa w przypadku aplikacji z kluczem klienta.
Dlatego w puli użytkowników spróbuj utworzyć nową aplikację bez generowania klucza tajnego klienta. Następnie użyj tej aplikacji, aby zarejestrować nowego użytkownika lub potwierdzić rejestrację.
źródło
"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."
Według Docs: http://docs.aws.amazon.com/cognito/latest/developerguide/setting-up-the-javascript-sdk.html
Javascript SDK nie obsługuje aplikacji z kluczem tajnym klienta.
Instrukcje informują teraz, że podczas tworzenia aplikacji dla puli użytkowników należy usunąć zaznaczenie opcji „Generuj klucz klienta”.
źródło
Może to nastąpić kilka lat później, ale po prostu odznacz opcję „Generuj klucz klienta” i będzie działać dla Twoich klientów internetowych.
źródło
Ponieważ wszyscy inni opublikowali swój język, oto węzeł (i działa w przeglądarce z
browserify-crypto
, automatycznie używany, jeśli używasz pakietu webpacka lub browserify):źródło
Miałem ten sam problem w .net SDK.
Oto, jak sobie poradziłem, na wypadek, gdyby ktoś tego potrzebował:
Rejestracja wygląda wtedy następująco:
źródło
Dla każdego, kto jest zainteresowany wykorzystaniem AWS Lambda do rejestracji użytkownika przy użyciu AWS JS SDK, oto kroki, które wykonałem:
Utwórz kolejną funkcję lambda w Pythonie, aby wygenerować klucz:
Wywołaj funkcję za pomocą funkcji nodeJS w AWS. Podpis działał jako tajny skrót dla Cognito
Uwaga: odpowiedź w dużej mierze opiera się na odpowiedzi George'a Campbella w poniższym linku: Obliczanie skrótu SHA za pomocą ciągu znaków + tajnego klucza w Pythonie
źródło
Rozwiązanie dla
golang
. Wydaje się, że należy to dodać do SDK.źródło
Rozwiązanie dla NodeJS z SecretHash
Wydaje się głupie, że AWS usunęło tajny klucz z SDK, ponieważ nie zostanie on ujawniony w NodeJS.
Mam to działające w NodeJS przechwytując pobieranie i dodając zaszyfrowany klucz za pomocą odpowiedzi @Simon Buchan .
cognito.js
fetch-inceptor.js ( rozwidlone i edytowane dla NodeJS z Fork z https://github.com/werk85/fetch-intercept/blob/develop/src/index.js )
źródło
W Javie możesz użyć tego kodu:
źródło
Amazon wspomina o tym, jak Computing SecretHash Values for Amazon Cognito w swojej dokumentacji z kodem aplikacji Java. Tutaj ten kod działa z zestawem Boto 3 Python SDK .
Możesz znaleźć swoje
App clients
w menu po lewej stronie podGeneral settings
. Zdobądź jeApp client id
iApp client secret
twórzSECRET_HASH
. Dla lepszego zrozumienia wykomentowałem wszystkie wyniki każdego wiersza.W dokumentacji boto 3 widzimy dużo czasu, o który pytamy
SECRET_HASH
. Zatem powyższe linie kodu pomogą ci to stworzyćSECRET_HASH
.Jeśli nie chcesz używać,
SECRET_HASH
usuń zaznaczenieGenerate client secret
podczas tworzenia aplikacji.źródło
app_client_id
iusername
. Ale wyświetlam poprawne wyjście jako komentarz, który jest wyświetlany zgodnie zusername
+app_client_id
. Wielkie dzięki.to jest przykładowy kod php, którego używam do generowania tajnego skrótu
w tym przypadku wynikiem jest:
źródło
dla JAVA i .NET musisz podać sekret w parametrach auth z nazwą
SECRET_HASH
.I powinno działać.
źródło
C ++ z Qt Framework
źródło
Może istnieć bardziej kompaktowa wersja, ale działa to dla Rubiego, szczególnie w Ruby on Rails, bez konieczności niczego:
źródło
Uwierzytelnianie Cognito
Błąd: klient aplikacji nie jest skonfigurowany pod kątem hasła tajnego, ale odebrano tajny skrót
Podanie klucza SecretKey jako nil działało dla mnie. Podane poświadczenia obejmują: -
AWSCognitoUserPoolsSignInProviderKey (AccessKeyId)
Wszystkie powyższe rzeczy działają z poniższym połączonym przykładem kodu.
Przykładowy kod AWS: https://github.com/awslabs/aws-sdk-ios-samples/tree/master/CognitoYourUserPools-Sample/Swift
Daj mi znać, jeśli to nie zadziała.
źródło
Oto moje 1 polecenie i działa (potwierdzone :))
źródło