Проверка токена OpenID Access в PHP

Я пытаюсь сделать SSO проверки на ThinkTect OpenId Connect в PHP Я написал клиент и получить маркер доступа. НО я не могу узнать, как это подтвердить.

В документации сказано: 3.2.2.9. Проверка токена доступа

Чтобы проверить токен доступа, выданный из конечной точки авторизации, с помощью токена ID, клиент ДОЛЖЕН сделать следующее:

  1. Хешируйте октеты представления ASCII access_token с помощью алгоритма хеширования, указанного в JWA [JWA] для параметра заголовка alg заголовка JOSE идентификатора токена. Например, если alg - RS256, используемый алгоритм хеширования - SHA-256.

  2. Возьмите самую левую половину хэша и base64url закодируйте его.

  3. Значение at_hash в идентификаторе Token ДОЛЖНО совпадать со значением, полученным на предыдущем шаге.

Я понятия не имею, как сделать шаг 1. Я получил ALg как RS256, и у меня есть at_hash из токена Id, я просто не могу найти экзамен в PHP о том, как выполнить проверку.

1 ответ

Вот пример в 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));
    }
Другие вопросы по тегам