使用刷新令牌通过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
。对此问题的任何帮助表示赞赏。
由于
答案 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可以设置一些扩展名和标记。