Php 重定向到Microsoft登录页时,Microsoft graph的cors问题
我正在开发laravel api,UI是angularjs,问题是当重定向到Microsoft登录页面时,Microsoft graph的cors问题,问题是 无法加载XMLHttpRequest . 重定向自 ”“到 “…rect_uri=https%3A%2F%2Freservations api.nymblpro.com%2Fcoordinator%2Fevent” 已被CORS策略阻止:请求需要飞行前,即 不允许跟随跨原点重定向 我试着设置cors中间件,但还是遇到了同样的问题。 我的代码如下:Php 重定向到Microsoft登录页时,Microsoft graph的cors问题,php,azure,laravel-5,cors,microsoft-graph-api,Php,Azure,Laravel 5,Cors,Microsoft Graph Api,我正在开发laravel api,UI是angularjs,问题是当重定向到Microsoft登录页面时,Microsoft graph的cors问题,问题是 无法加载XMLHttpRequest . 重定向自 ”“到 “…rect_uri=https%3A%2F%2Freservations api.nymblpro.com%2Fcoordinator%2Fevent” 已被CORS策略阻止:请求需要飞行前,即 不允许跟随跨原点重定向 我试着设置cors中间件,但还是遇到了同样的问题。 我的代
public function get_microsoft_token(Request $request)
{
$provider = new \League\OAuth2\Client\Provider\GenericProvider([
'clientId' => 'fd482697-fd9f-46ac-ab3a-727e47517c8b',
'clientSecret' => 'WZOh3qLz7ZQyKemCQf3RsCF',
'redirectUri' => 'https://reservations-api.nymblpro.com/coordinator/event',
'urlAuthorize' => 'https://login.microsoftonline.com/common/oauth2/v2.0/authorize',
'urlAccessToken' => 'https://login.microsoftonline.com/common/oauth2/v2.0/token',
'urlResourceOwnerDetails' => '',
'scopes' => 'openid calendars.readwrite'
]);
if (!$request->has('code')) {
return redirect($provider->getAuthorizationUrl());
}
else {
$accessToken = $provider->getAccessToken('authorization_code', [
'code' => $request->input('code')
]);
return ($accessToken->getToken());
}
}
看起来您的AngularJs应用程序将调用您的Laravel应用程序的api,该api返回授权url,然后您的AngularJs前端将在AJAX函数中调用此url。所以这应该是罪犯 您可以尝试修改angularjs前端应用程序中的代码,将
$http.get()
函数更改为类似以下内容:
// similar behavior as an HTTP redirect
window.location.replace("http://stackoverflow.com");
// similar behavior as clicking on a link
window.location.href = "http://stackoverflow.com";
否则,您可以尝试在angularjs应用程序中使用adal for js。有关更多信息,请参阅。可能与此相关。如果您还发布了发送请求的客户端JavaScript代码的相关部分,这将非常有用。@sideshowbarker这里是JavaScript“$scope.getTokenForCalender=function(){var url=“”然后(函数(结果){console.log(“日历集成的令牌-”+JSON.stringify(结果));},函数(err){console.log(JSON.stringify(err));}$scope.getTokenforcalander();这里err is nulli可以通过直接重定向到授权签名页面绕过这个问题,谢谢@garry liu和sidesshowbarker