AWS Cognito PHP SDK-无法验证客户端的秘密哈希

问题描述

到目前为止,我已经创建了用户池,应用程序客户端并标记了“生成客户端密码”框。 我能够注册登录,注销。 但是我无法使用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。 到目前为止,我已经花了数小时尝试Google的解决方案。 javascript SDK似乎有问题,但是没有提到PHP。我阅读了AWS文档,找不到我做错了什么。我将不胜感激任何帮助。谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)