我已经在https://developer.microsoft.com/en-us/graph/docs/authorization/app_authorization进行了应用授权步骤,但似乎无法让请求生效。我一直都有错误说
对预检请求的响应没有通过访问控制检查:否'访问控制 - 允许 - 来源'标头出现在请求的资源上。起源' http://localhost:8080'因此不允许访问。"
这似乎很奇怪,因为我包括那个标题。
$.ajax({
type: "POST",
url: url,
crossDomain: true,
data: {
'refreshToken': refreshToken,
'client_id': clientId,
'client_secret': clientSecret,
'redirect_uri': redirect_uri,
'resource': resource
},
dataType: 'json',
beforeSend: function (xhr) {
xhr.setRequestHeader('Access-Control-Allow-Origin', "*");
xhr.setRequestHeader('Access-Control-Allow-Methods', "*");
xhr.setRequestHeader('Access-Control-Allow-Headers', "*");
},
success: function (data, status, headers, config) {
callback(data);
},
error: function (data, status, headers, config) {
console.log('Error getting access token from Microsoft Graph: ' + status + " " + JSON.stringify(data));
}
});
答案 0 :(得分:1)
您使用的是错误的OAuth2流程。您不应该在浏览器应用程序中使用授权宏代码流,因为当浏览器请求重定向URL(令牌不在URL的散列#部分中)时,您无法保证客户端的安全性并且令牌会到达服务器。
这就是为什么Microsoft API不支持对/token
端点的XHR访问(省略CORS响应头)。
您可以考虑使用专为在浏览器中使用而设计的隐式流,保持令牌的安全,并且不需要客户端密码。