【问题标题】:Couldn't generate correct PASSWORD_CLAIM_SIGNATURE in PHP for Cognito无法在 PHP 中为 Cognito 生成正确的 PASSWORD_CLAIM_SIGNATURE
【发布时间】:2020-08-13 03:22:13
【问题描述】:

我正在尝试使用 AuthFlow USER_SRP_AUTH 进行用户登录。我在发起验证请求的响应中收到“PASSWORD_VERIFIER”质询。在回应这个挑战时,我不确定我应该传递什么作为PASSWORD_CLAIM_SIGNATURE 的值。我根据文档和 java 代码尝试了不同的值,但没有成功。

我将下面的代码用于respondToAuthChallenge 方法:

$date = date('D M d H:i:s T Y');

$srp = new Srp();
$a = $srp->getRandomSeed();
$A = $srp->generateA($a);

$challengeParameters = $result->get('ChallengeParameters');

$s = $srp->getRandomSeed();
$x = $srp->generateX($s, 'MY_USERNAME', 'MY_PASSWORD');
$S = $srp->generateS_Client($A, $challengeParameters['SRP_B'], $a, $x);
$K = $srp->generateK($S);

$response = $client->respondToAuthChallenge([
    'ChallengeName'      => 'PASSWORD_VERIFIER',
    'ClientId'           => 'CLIENT_ID',
    'ChallengeResponses' => [
        'TIMESTAMP'                   => $date,
        'USERNAME'                    => $challengeParameters['USER_ID_FOR_SRP'],
        'PASSWORD_CLAIM_SECRET_BLOCK' => $challengeParameters['SECRET_BLOCK'],
        'PASSWORD_CLAIM_SIGNATURE'    => hash_hmac('sha256', $K, $challengeParameters['SALT'])
    ]
]);

我用过这个 PHP SRP 客户端:https://github.com/falkmueller/srp/

respondToAuthChallenge 请求的响应中,我收到此错误

400 Bad Request` response:
{"__type":"NotAuthorizedException","message":"Incorrect username or password."}

这个错误很可能是由不正确的PASSWORD_CLAIM_SIGNATURE 引起的。因为我还没有真正找到这个键应该包含什么值,只是根据我找到的文档和 java 代码尝试了一些东西。

【问题讨论】:

标签: php amazon-cognito aws-php-sdk srp-protocol


【解决方案1】:

PASSWORD_CLAIM_SIGNATURE 的值似乎没有在任何地方记录,但查看我派生的一些 AWS 源代码。

将以下内容连接成一个字符串:

  • cognito 用户池 ID,不包括区域
  • 上一次调用中的 USER_ID_FOR_SRP
  • 上一次调用的 SECRET_BLOCK
  • 时间戳

然后对该字符串执行 hmac sha 256。

请注意,TIMESTAMP 具有格式(也未记录):

TIMESTAMP 格式应为 EEE MMM d HH:mm:ss z yyyy 英文。

来源:this file 的第 299 行

【讨论】:

  • 密码在哪里添加?
  • 您不需要明确发送密码。密码用于 SRP 的设置@wpater 部分(查看上面问题的脚本,generateX 行)。如果您想避免发送密码,您只需要使用 SRP(虽然我使用它是因为 cognito 设备跟踪不适用于 USER_PASSWORD_AUTH,从而阻止使用刷新令牌)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-19
  • 1970-01-01
  • 2017-03-17
  • 1970-01-01
  • 2021-10-07
  • 2020-07-12
相关资源
最近更新 更多