Проверка токена OpenID Access в PHP
Я пытаюсь сделать SSO проверки на ThinkTect OpenId Connect в PHP Я написал клиент и получить маркер доступа. НО я не могу узнать, как это подтвердить.
В документации сказано: 3.2.2.9. Проверка токена доступа
Чтобы проверить токен доступа, выданный из конечной точки авторизации, с помощью токена ID, клиент ДОЛЖЕН сделать следующее:
Хешируйте октеты представления ASCII access_token с помощью алгоритма хеширования, указанного в JWA [JWA] для параметра заголовка alg заголовка JOSE идентификатора токена. Например, если alg - RS256, используемый алгоритм хеширования - SHA-256.
Возьмите самую левую половину хэша и base64url закодируйте его.
Значение 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));
}