Microsoft身份验证:如何使用ajax帖子刷新访问令牌?

时间:2017-07-03 18:28:18

标签: ajax http graph oauth-2.0 authorization

我已经在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));
            }
        });

1 个答案:

答案 0 :(得分:1)

您使用的是错误的OAuth2流程。您不应该在浏览器应用程序中使用授权宏代码流,因为当浏览器请求重定向URL(令牌不在URL的散列#部分中)时,您无法保证客户端的安全性并且令牌会到达服务器。

这就是为什么Microsoft API不支持对/token端点的XHR访问(省略CORS响应头)。

您可以考虑使用专为在浏览器中使用而设计的隐式流,保持令牌的安全,并且不需要客户端密码。