我正在使用Graph API,用户可以通过他们的Microsoft帐户登录。我关注Get started with Microsoft Graph in a PHP app 制品
现在我对Laravel并不陌生,但我似乎无法弄清楚这个问题。我正在使用League OAuth2 Package。根据上面的链接,我应该在我建立连接之前获得访问令牌。现在,我自己做了大量的调试,以下是我找到的。
$token = $this->createAccessToken($prepared, $grant);
当它尝试创建令牌时,它会在此之前检查access_token
是否存在。现在我的理解是,access_token
将从此方法生成。那它怎么可能已经存在。有人可以帮我这个吗?
这是我的路线代码:
Route::get('/oauth', function (Request $request) {
$provider = new \League\OAuth2\Client\Provider\GenericProvider([
'clientId' => 'client_id',
'clientSecret' => 'secret_key',
'redirectUri' => 'http://localhost:8000/oauth',
'urlAuthorize' => 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize',
'urlAccessToken' => 'https://login.microsoftonline.com/common/oauth2/v2.0/token',
'urlResourceOwnerDetails' => '',
'scopes' => 'openid'
]);
if (!$request->has('code')) {
return redirect($provider->getAuthorizationUrl());
} else {
$accessToken = $provider->getAccessToken('authorization_code', [
'code' => $request->input('code')
]);
exit($accessToken->getToken());
}
});
感谢。
更新
现在我正在制作像这样的CURL请求
$url = 'https://login.microsoftonline.com/common/oauth2/v2.0/token';
$data = 'grant_type=authorization_code';
$data .= '&code=' . $request->input('code');
$data .= '&client_id=id_here';
$data .= '&client_secret=secret_here';
$data .= '&redirect_uri=http://localhost:8000/oauth';
$data .= '&scopes=openid user.read';
$additional_headers = array(
'Content-Type' => 'application/x-www-form-urlencoded'
);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $additional_headers);
$server_output = curl_exec ($ch);
dd($server_output);
但是,此CURL请求的输出/响应被赋予' token_id'宾语。而不是access_token& expiry_in ...
答案 0 :(得分:0)
您不创建访问令牌,您可以通过身份验证提供程序(在本例中为Microsoft)提供。
使用authorization_code
流程,您在技术上会收到验证码。然后,您将Auth Code提交回服务器,以将其交换为访问令牌。然后,将调用的Authorization标头中的Access Token传递给Microsoft Graph API。
我在v2端点上有一个入门知识,它将引导您了解OAUTH过程如何与您可能会发现有用的授权码流一起工作:Microsoft v2 endpoint primer。
更新:
您无法使用curl
之类的工具来执行授权码授权。对/authorize
的第一次调用是GET
,导致用户登录的网页。完成后,身份验证提供程序会将用户重定向回您的Web服务器,然后将POST
发送到/token
端点。
如果要使用curl
(或任何其他客户端脚本),则需要使用隐式授权。我也有类似的步骤:v2 Endpoint and Implicit Grant。