Я реализовал в своем бэкэнде Cognito с регистрацией и входом в систему, активацией и деактивацией MFA, но теперь я хочу реализовать запоминающие устройства, чтобы уменьшить количество SMS-подтверждений.
Для этого я настроил функцию InitiateAuth следующим кодом:
$client->initiateAuth([
'AuthFlow' => 'USER_SRP_AUTH', // REQUIRED
'AuthParameters' => [
"USERNAME" => $email,
"PASSWORD" => $password,
"SRP_A" => $bigA,
],
'ClientId' => $this->getClientId(), // REQUIRED
]);
Эта функция работает правильно и возвращает код в следующем изображении:
https://i.gyazo.com/a439e48e2de85a094f56ed4cfee10f83.png
Затем я продолжаю генерировать значения SRP и вызываю функцию responseToAuthChallenge со следующим кодом:
$client->respondToAuthChallenge([
'ChallengeName' => 'DEVICE_SRP_AUTH',
'ChallengeResponses' => [
'USERNAME' => $username,
'SRP_A' => $bigA,
],
'ClientId' => $this->getClientId(),
]);
Тем не менее, он возвращает мне сообщение об ошибке: «Отсутствует обязательный параметр DEVICE_KEY».
Если я помещаю ключ DEVICE_KEY в ChallengeResponses, он начинает возвращать мне ошибку «Устройство не существует».
Я много искал и не могу найти способ сгенерировать DEVICE_KEY. Я пытался с уникальным идентификатором и отправив его в обоих initiateAuthand responseToAuthChallenge, но ошибка та же.
Любая подсказка, как я могу это сделать? Я полагаю, что код SRP еще не на 100%, поскольку все еще понимает концепцию, но не может понять часть DEVICE_KEY.
Спасибо
Похоже, вы должны использовать Поток аутентификации на стороне сервера
Для серверных приложений аутентификация пула пользователей аналогична аутентификации для клиентских приложений, за исключением:
Серверное приложение вызывает AdminInitiateAuth
API (вместо InitiateAuth
). Этот метод требует учетных данных администратора AWS. Этот метод возвращает параметры аутентификации.
Как только у него есть параметры аутентификации, приложение вызывает AdminRespondToAuthChallenge
API (вместо RespondToAuthChallenge
), который также требует учетных данных администратора AWS.
AdminInitiateAuth
возвращает среди прочего ключ устройства.
Других решений пока нет …