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

标签 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" => $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”。

如果我将 DEVICE_KEY key 放入 ChallengeResponses 中,它会开始返回错误“设备不存在”。

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

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

谢谢

最佳答案

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

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

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

  • 获得身份验证参数后,应用会调用 AdminRespondToAuthChallenge API(而不是 RespondToAuthChallenge),这也需要 AWS 管理员凭据。

AdminInitiateAuth返回设备 key 等内容。

关于php - 处理 SRP 身份验证和生成设备 key (PHP - 服务器端),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50913452/

相关文章:

ruby-on-rails - 生产服务器上的Elasticsearch RAM问题

java - HashMap<Integer, Object> 获取方法

php - 如何在 Laravel 中通过一次查询保存多条记录?

php - 使用 PHP 和 RegEx 从站点的源代码中获取所有选项值

php - 计算 PHP DateInterval 中的总秒数

amazon-web-services - 获取kubernetes集群的所有Pod列表(包括已删除)? (AWS EKS)

amazon-web-services - 如何为未经身份验证的 API 网关请求添加默认限制的 API key 以防止滥用?

php - 使用 AJAX 和 PHP 更新表单字段

java - 如何使用 Guava 的 MultiMap 输出唯一键? ( java )

hashmap - 将通用 'contain_keys' 方法添加到与 &[&str] 和 &[String] 一起使用的 HashMap