编程语言
首页 > 编程语言> > 处理SRP Auth和生成设备密钥(PHP – 服务器端)

处理SRP Auth和生成设备密钥(PHP – 服务器端)

作者:互联网

我已经在我的后端Cognito中实现了注册和登录,MFA激活和停用,但现在我想实现记忆设备,以减少短信确认.

为此,我已将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值,并使用以下代码调用函数respondToAuthChallenge:

$client->respondToAuthChallenge([
'ChallengeName' => 'DEVICE_SRP_AUTH',
'ChallengeResponses' => [
'USERNAME' => $username,
'SRP_A' => $bigA,
],
'ClientId' => $this->getClientId(),
]);

然而,它返回一个错误说:’缺少必需参数DEVICE_KEY’.

如果我在ChallengeResponses中放置一个DEVICE_KEY密钥,它会开始向我返回错误’设备不存在’.

我搜索了很多,但找不到生成DEVICE_KEY的方法.我尝试使用唯一ID并在launchAuthand respondToAuthChallenge中发送它,但错误是相同的.

任何线索我该怎么办?我相信SRP代码还不是100%,因为仍然理解这个概念,但是,无法理解DEVICE_KEY部分.

谢谢

解决方法:

看起来你必须使用Server Side Authentication Flow

对于服务器端应用程序,用户池身份验证与客户端应用程序的身份验证类似,但以下情况除外:

>服务器端应用程序调用AdminInitiateAuth API(而不是InitiateAuth).此方法需要AWS管理员凭据.此方法返回身份验证参数.
>一旦具有身份验证参数,应用程序就会调用AdminRespondToAuthChallenge API(而不是RespondToAuthChallenge),这也需要AWS管理员凭据.

AdminInitiateAuth返回设备密钥等其他内容.

标签:php,key,amazon-web-services,device,amazon-cognito
来源: https://codeday.me/bug/20190710/1425382.html