PHP中的OpenID访问令牌验证

时间:2015-06-06 16:29:19

标签: php validation openid-connect thinktecture

我试图在PHP中进行思想结构OpenId连接的SSO验证 我编写了一个客户端并获得了访问令牌。但我无法找到如何验证它。

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

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

  1. 使用隐藏access_token的ASCII表示的八位字节 在JAW [JWA]中为alg Header指定的哈希算法 ID Token的JOSE标题的参数。例如,如果alg是 RS256,使用的哈希算法是SHA-256。

  2. 取最左边的一半哈希和base64url对其进行编码。

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

  4. 我不知道如何制作第1步。 我得到了ALG作为RS256,我有来自Id令牌的at_hash,我无法在PHP中找到关于如何进行验证的示例。

1 个答案:

答案 0 :(得分:0)

Here是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));
    }