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