Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
处理SRP身份验证和生成设备密钥(PHP-服务器端)_Php_Amazon Web Services_Key_Device_Amazon Cognito - Fatal编程技术网

处理SRP身份验证和生成设备密钥(PHP-服务器端)

处理SRP身份验证和生成设备密钥(PHP-服务器端),php,amazon-web-services,key,device,amazon-cognito,Php,Amazon Web Services,Key,Device,Amazon Cognito,我已经在我的后端Cognito中实现了注册和登录、MFA激活和停用,但现在我想实现记住设备,以减少SMS确认 为此,我将InitiateAuth函数调整为以下代码: $client->initiateAuth([ 'AuthFlow' => 'USER_SRP_AUTH', // REQUIRED 'AuthParameters' => [ "USERNAME" => $email, "PASSWORD" => $password, "SRP_A" => $b

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

为此,我将InitiateAuth函数调整为以下代码:

$client->initiateAuth([
'AuthFlow' => 'USER_SRP_AUTH', // REQUIRED
'AuthParameters' => [
"USERNAME" => $email,
"PASSWORD" => $password,
"SRP_A" => $bigA,
],
'ClientId' => $this->getClientId(), // REQUIRED
]);
$client->respondToAuthChallenge([
'ChallengeName' => 'DEVICE_SRP_AUTH',
'ChallengeResponses' => [
'USERNAME' => $username,
'SRP_A' => $bigA,
],
'ClientId' => $this->getClientId(),
]);
此函数正常运行,并返回下图中的代码:

然后,我继续生成SRP值,并调用函数respondToAuthChallenge,代码如下:

$client->initiateAuth([
'AuthFlow' => 'USER_SRP_AUTH', // REQUIRED
'AuthParameters' => [
"USERNAME" => $email,
"PASSWORD" => $password,
"SRP_A" => $bigA,
],
'ClientId' => $this->getClientId(), // REQUIRED
]);
$client->respondToAuthChallenge([
'ChallengeName' => 'DEVICE_SRP_AUTH',
'ChallengeResponses' => [
'USERNAME' => $username,
'SRP_A' => $bigA,
],
'ClientId' => $this->getClientId(),
]);
但是,它会返回一个错误:“缺少必需的参数DEVICE_KEY”

如果我将设备密钥放入ChallengeResponse中,它将开始向我返回错误“设备不存在”

我搜索了很多,但找不到生成设备密钥的方法。我尝试使用唯一ID,并将其发送到InitiateAuthChallenge和respondToAuthChallenge中,但错误相同

知道我该怎么做吗?我相信SRP代码还不是100%,因为仍然理解这个概念,但无法理解设备的关键部分


谢谢

看来您必须使用

对于服务器端应用程序,用户池身份验证与客户端应用程序的身份验证类似,除了:

  • 服务器端应用程序调用
    AdminInitiateAuth
    API(而不是
    InitiateAuth
    )。此方法需要AWS管理员凭据。此方法返回身份验证参数

  • 一旦有了身份验证参数,应用程序将调用
    AdminRespondToAuthChallenge
    API(而不是
    RespondToAuthChallenge
    ),这也需要AWS管理员凭据


返回的内容包括设备密钥。

Hi,@Cafn我也面临着这个问题。您已经解决了这个问题吗?还有Cafn,您是如何使用PHP生成$bigA(SRP_A值)的?Hi@VivekPipaliya。可悲的是,我记不清了,因为我不再在公司工作了,也不记得我当时做了什么。我记得我所做的是检查文档(aws的弱点),并检查我是否做的每件事都是正确的。此外,我认为我没有按照正确的顺序处理请求(基本上,您使用的是一个接一个的响应)。祝你在这个问题上好运,很抱歉没有提供更多帮助。检查这个:我们也可以使用AdminInitiateAuth来使用“记忆设备”功能吗?