Я пытаюсь создать токен доступа через поток PKCE для вызова API Microsoft Graph.
Я следую этому msdoc: Платформа идентификации Microsoft и поток кода авторизации OAuth 2.0 — Microsoft Энтра | Microsoft Docs
Но я получаю сообщение об ошибке, как показано ниже:
AADSTS501491: Invalid size of Code_Challenge parameter.
Чтобы сгенерировать code_challenge, я использую приведенный ниже код PHP со ссылкой на приведенную выше документацию.
Code_challenge, сгенерированный моим кодом, составляет 43 символа, что соответствует это та же строка, что и значение, сгенерированное этим инструментом с использованием того же code_verifier, что не так?
Для тестирования я напрямую сохранил значение, сгенерированное указанным выше инструментом, в $codeChallenge в следующем примере. код и получил ту же ошибку.
public function generateUrl()
{
// cf. https://datatracker.ietf.org/doc/html/rfc7636#section-4
$codeVerifier = $this->generateCodeVerifier();
$codeChallenge = $this->generateCodeChallenge($codeVerifier);
$fields = [
'tenant' => $tenantId,
'client_id' => $client_id,
'redirect_uri' => $redirect_uri,
'response_type' => 'code',
'response_mode' => 'query',
'scope' => 'User.Read Directory.Read.All Group.Read.All GroupMember.Read.All',
'code_challenge' => $codeChallenge,
'code_challenge_method' => 'S256',
];
$baseUrl = "https://login.microsoftonline.com/${ten ... /authorize";
return $baseUrl . '?' . http_build_query($fields);
}
private function generateCodeVerifier() {
$randomString = random_bytes(32);
$urlSafeString = strtr(base64_encode($randomString), '+/', '-_');
return rtrim($urlSafeString, '=');
}
private function generateCodeChallenge($codeVerifier) {
$hashedVerifier = hash('sha256', $codeVerifier, true);
$urlSafeString = strtr(base64_encode($hashedVerifier), '+/', '-_');
return rtrim($urlSafeString, '=');
}
Подробнее здесь: https://stackoverflow.com/questions/787 ... ge-paramet