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

时间:2015-07-01 07:35:32

标签: jquery ajax rest office365

使用刷新令牌通过office 365 REST api获取访问令牌时,我做了以下Jquery ajax请求。

<script>
$("#search").on("click",function(){
// Handler for .ready() called.
$('html, body').animate({
    scrollTop:$('#view2').parent().scrollTop() + $('#view2').offset().top - $('#view2').parent().offset().top
}, 'slow');
});
</script>

我收到以下错误

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. requests通过refresh_token库在python中发出相同的POST请求,并且我无法弄清楚为什么相同的POST请求无法通过client credentials。对此问题的任何帮助表示赞赏。

由于

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

使用CORS后请注意CORS使用隐式授权流程,因此您将无法获得刷新令牌。 查看http://www.cloudidentity.com/blog/2014/10/28/adal-javascript-and-angularjs-deep-dive/以了解隐式授权流程。

答案 2 :(得分:0)

如果您是从localhost执行此操作,则大多数浏览器不允许来自localhost的CORS。查看在浏览器中找到正确的标志/配置,从localhost启用CORS。 Chrome可以设置一些扩展名和标记。