要使用Microsoft Graph,我正在尝试代表用户进行身份验证。我正在关注this教程,目前停留在第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());
我在做什么错了?
答案 0 :(得分:0)
我猜完整的错误描述是:
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'
and和Guzzle client将完成为/token
端点构造编码主体的其余工作