无法在 PHP 中为认知生成正确的PASSWORD_CLAIM_SIGNATURE



我正在尝试使用AuthFlowUSER_SRP_AUTH进行用户登录。在initiateAuth请求的响应中,我收到了"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代码的东西。

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。

来源:此文件的第299行

相关内容

最新更新