【发布时间】:2020-12-11 17:25:55
【问题描述】:
到目前为止,我创建了用户池、应用程序客户端并标记了生成客户端密码框。 我能够注册,登录,注销。 但我无法使用 REFRESH_TOKEN_AUTH 流刷新令牌。
private function refreshConf($refreshToken, $hash)
{
return [
'AuthFlow' => 'REFRESH_TOKEN_AUTH',
'ClientId' => $this->client_id,
'UserPoolId' => $this->userpool_id,
'AuthParameters' => [
'REFRESH_TOKEN' => $refreshToken,
'SECRET_HASH' => $hash
]
];
}
public function refreshToken(string $refreshToken, string $hash)
{
try {
$conf = $this->refreshConf($refreshToken, $hash);
$result = $this->client->InitiateAuth($conf);
$result = $result->toArray();
logger($result);
if (isset($result['AuthenticationResult'])) {
return [
'error' => false,
'message' => 'SUCCESS',
'data' => $result
];
}
} catch (\Exception $e) {
logger(get_class($e));
return [
'error' => true,
'message' => $e->getAwsErrorMessage()
];
}
}
还有我生成秘密哈希的函数:
public function cognitoSecretHash($username)
{
$hash = hash_hmac('sha256', $username . $this->client_id, $this->client_secret, true);
return base64_encode($hash);
}
秘密哈希在注册期间存储在用户模型中,因此我可以在我想刷新令牌时发送它。但是每次Aws\CognitoIdentityProvider\Exception\CognitoIdentityProviderException
被抛出。我得到了回复Unable to verify secret hash for client d***************9。
到目前为止,我已经花了几个小时尝试谷歌解决方案。 javascript SDK似乎有问题,但没有提到PHP。我浏览了 AWS 文档,但找不到我做错了什么。我将不胜感激任何帮助。谢谢。
【问题讨论】:
-
AWS SDK for PHP 3.x 关于 InitiateAuth docs.aws.amazon.com/aws-sdk-php/v3/api/…的文档
-
你解决了吗?我遇到了同样的问题,似乎找不到太多信息
-
你解决了吗?
-
您是否尝试过专门为刷新令牌调用发送客户端密码(没有散列)?这适用于我当前的项目。
标签: php laravel amazon-cognito refresh-token aws-php-sdk