В пулах пользователей когнито у меня есть две разные группы: администраторы и пользователи. Я хочу разрешить администраторам создавать пользователей когнитивных систем, поэтому я создал нового пользователя с помощью метода AdminCreateUser класса CognitoIdentityServiceProvider. Ссылка - https://docs.aws.amazon.com/cognito/latest/developerguide/how-to-create-user-accounts.html.
Теперь я хочу авторизовать пользователя в userpool. Я перехожу по этой ссылке - https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.html - процесс аутентификации на стороне клиента. Но «RespondToAuthChallenge» - возвращает NotAuthorizedException, Неверное имя пользователя или пароль.
import * as AWS from 'aws-sdk'
import { SRPClient, calculateSignature, getNowString } from 'amazon-user-pool-srp-client'
const userPoolId = 'XXX'
const ClientId = 'XXX'
const verifyUser = () => {
AWS.config.region = 'us-west-2'
const srp = new SRPClient(userPoolId)
const SRP_A = srp.calculateA()
var params = {
AuthFlow: 'USER_SRP_AUTH',
ClientId,
AuthParameters: {
USERNAME: formState.email,
SRP_A,
},
}
let cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider()
cognitoidentityserviceprovider.initiateAuth(params, function (err, data) {
if (err) {
const error = err.message ? err.message : err
console.log(error)
}
else {
console.log(data) // --> data.session is undefined
if (data.ChallengeParameters && data.ChallengeName) {
const passwordAuthenticationKey =
srp.getPasswordAuthenticationKey(
data.ChallengeParameters.USER_ID_FOR_SRP,
formState.password,
data.ChallengeParameters.SRP_B,
data.ChallengeParameters.SALT
)
const dateNow = getNowString()
const signatureString = calculateSignature(
passwordAuthenticationKey,
userPoolId,
data.ChallengeParameters.USER_ID_FOR_SRP,
data.ChallengeParameters.SECRET_BLOCK, dateNow
)
var params = {
ChallengeName: data.ChallengeName,
ClientId,
ChallengeResponses: {
// PASSWORD_VERIFIER
PASSWORD_CLAIM_SIGNATURE: signatureString,
PASSWORD_CLAIM_SECRET_BLOCK: data.ChallengeParameters.SECRET_BLOCK,
TIMESTAMP: dateNow,
USERNAME: data.ChallengeParameters.USER_ID_FOR_SRP,
},
Session: data.Session, // undefined
};
cognitoidentityserviceprovider.respondToAuthChallenge(params, function (err, data) {
if (err) {
const error = err.message ? err.message : err
console.log(error) // Incorrect username or password
}
else {
console.log(data)
}
})
}
}
})
}
Я создал пользователей diff, но безуспешно. Пользователь регистрируется, но responseToAuthChallenge выдает ошибку. Ответ InitiateAuth возвращает параметры ChallengeName и Challenge, но сеанс не указан.
Я нашел это утверждение, которое я не могу понять - когда выполняется следующая операция подтверждения пароля RespondToAuthChallenge, Amazon Cognito возвращает общую ошибку NotAuthorizedException, указывающую, что имя пользователя или пароль неверны. в https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-managing-errors.html.
Пожалуйста, дайте мне знать, если у вас есть какое-либо решение / идея, спасибо !!