使用刷新令牌获取访问令牌 office 365 rest api

using refresh token to get access token office 365 rest api

在使用刷新令牌通过 Office 365 REST 获取访问令牌时 api 我提出了以下 Jquery ajax 请求。

jQuery.ajax({
    url: "https://outlook.office365.com/common/oauth2/token",
    type: "post",
    headers:{
      "Content-Type":"application/x-www-form-urlencoded"
    },
    data: {
      grant_type: "refresh_token",
      refresh_token: access_data['refresh_token'],
      client_id: consumer_key,
      client_secret: consumer_secret,
      resource: "https://outlook.office365.com"
    },
    success: function(response){
      console.log(response)
    }
  })

我收到以下错误

XMLHttpRequest cannot load
https://outlook.office365.com/common/oauth2/token. 
No 'Access-Control-Allow-Origin' header is present on the requested
resource. Origin 'http://localhost' is therefore not allowed access. 
The response had HTTP status code 404.

但我能够使用相同的 refresh_tokenclient credentials 通过 requests 库在 python 中发出相同的 POST 请求,但我无法确定找出为什么相同的 POST 请求无法通过 jQuery 工作。在此问题上的任何帮助表示赞赏。

谢谢

http://outlook.office365.com 资源支持 CORS,因此您不应该 运行 遇到这个问题。我发现了这个 question on Stack Overflow 并且接受的答案表明 jQuery 更改了请求,因此 CORS 不起作用并且您需要在执行请求之前编辑请求 headers。

确保您的 jQuery 请求具有正确的 header。 Access-Control-Allow-Headers: x-requested-with

一旦您使用 CORS,请注意 CORS 使用隐式授权流,因此您将不会获得刷新令牌。 查看 http://www.cloudidentity.com/blog/2014/10/28/adal-javascript-and-angularjs-deep-dive/ 以了解有关隐式授权流程的更多信息。

如果您从本地主机执行此操作,大多数浏览器不允许来自本地主机的 CORS。研究在您的浏览器中找到正确的 flags/configuration 以从本地主机启用 CORS。 Chrome 有一些您可以设置的扩展和标志。