Не удалось запросить токен - PullRequest
0 голосов
/ 28 марта 2019

Чтобы использовать Microsoft Graph, я пытаюсь пройти аутентификацию от имени пользователя. Я следую этому учебнику и в настоящее время застрял на шаге 3.

При запросе токена я получаю 400 Bad Request ответ:

{
  "error": "invalid_scope",
  "error_description": "AADSTS70011: The provided request must include a 'scope' input parameter."
}

Несмотря на то, что я включаю параметр области действия, это мой запрос:

$guzzle = new \GuzzleHttp\Client(['headers' => [
    'Host' => 'https://login.microsoftonline.com',
    'Content-Type' => 'application/x-www-form-urlencoded'
    ]
]);

$url = 'https://login.microsoftonline.com/common/oauth2/v2.0/token';
$token = json_decode($guzzle->post($url, [
    'form_params' => [
        'client_id' => '################################',
        'scope' => 'user.read%20mail.read',
        'code' => $_GET['code'],
        'grant_type' => 'authorization_code',
        'redirect_uri' => 'https://eb3ef49e.ngrok.io/callback.php',
        'client_secret' => '################'
    ],
])->getBody()->getContents());

Что я делаю не так?

1 Ответ

0 голосов
/ 31 марта 2019

Полное описание ошибки:

AADSTS70011: предоставленный запрос должен содержать ввод 'scope' параметр. Предоставленное значение для входного параметра 'scope' не является действительный. Область действия user.read%20mail.read недействительна. Сфера Формат неверен. Область должна быть в действительной форме URI <https://example/scope> или действительный Guid <guid/scope>.

Если это так, конечная точка Azure AD не смогла распознать предоставленную здесь scope. /token конечная точка ожидает, что параметр scope будет указан как список разделенных пробелами областей . Это означает, что нет необходимости явно экранировать символ пробела здесь:

'scope' => 'user.read%20mail.read'

вместо этого укажите это так:

'scope' => 'user.read mail.read'

и и клиент Guzzle сделает остальную часть построения закодированного тела для /token конечной точки

...