Microsoft身份验证:如何使用ajax post来刷新访问令牌?
问题描述:
我一直在审查这里的应用程序授权步骤https://developer.microsoft.com/en-us/graph/docs/authorization/app_authorization,但似乎无法获得工作请求。我始终得到错误说Microsoft身份验证:如何使用ajax post来刷新访问令牌?
对预检请求的响应未通过访问控制检查:请求的资源上没有“Access-Control-Allow-Origin”标头。因此,原产地“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));
}
});
答
您使用的是错误的OAuth2流程。你不应该使用的授权盛大码因为当浏览器请求重定向URL(令牌不在URL的哈希#部分中)时,您无法保持客户机密安全并且令牌到达服务器。
这就是为什么Microsoft API不支持XHR访问/token
端点(通过省略CORS响应标头)。
您可以考虑使用专为浏览器使用而设计的隐式流程,使标记保持安全并且不需要客户机密。
当尝试使用隐式授权工作流端点进行身份验证时,出现相同的“Access-Control-Allow-Origin”错误。 – user3707850
您不能对'/ auth'端点使用XHR请求。这是OAuth2背后的基本理念 - 用户必须重定向到OAuth2服务器,并通过身份验证并重新导向回。所以客户端(您的应用程序)无法看到用户的密码。 XHR请求无法做到这一点。 –