2

我试图在 PHP 中对 thinktecture OpenId 连接进行 SSO 验证我已经编写了一个客户端并获得了一个访问令牌。但我不知道如何验证它。

文档说:3.2.2.9。访问令牌验证

要使用 ID 令牌验证从授权端点发出的访问令牌,客户端应该执行以下操作:

  1. 使用 JWA [JWA] 中为 ID 令牌的 JOSE 标头的 alg 标头参数指定的散列算法对 access_token 的 ASCII 表示的八位字节进行散列。例如,如果 alg 是 RS256,则使用的哈希算法是 SHA-256。

  2. 取散列的最左半部分并用 base64url 对其进行编码。

  3. ID 令牌中的 at_hash 值必须与上一步中生成的值匹配。

我不知道如何进行第 1 步。我将 ALg 设为 RS256,并且我从 Id 令牌中获得了 at_hash,我只是无法在 PHP 中找到有关如何进行验证的示例。

4

1 回答 1

0

是 PHP 中的一个示例,用于计算at_hash应该易于适应您的环境的值:

public function setAccessTokenHash($accessTokenString)
    {
        // bit : 256/384/512 
        if(isset($this->_header['alg']) && $this->_header['alg'] != 'none'){
            $bit = substr($this->_header['alg'], 2, 3);
        }else{
            // TODO: Error case. throw exception???
            $bit = '256';
        }
        $len = ((int)$bit)/16;
        $this->_payload['at_hash'] = Akita_OpenIDConnect_Util_Base64::urlEncode(substr(hash('sha'.$bit, $accessTokenString, true), 0, $len));
    }
于 2015-06-06T17:37:13.103 回答