【问题标题】:Microsoft Authentication: How to refresh access token using ajax post?Microsoft 身份验证:如何使用 ajax post 刷新访问令牌?
【发布时间】:2017-07-04 15:47:07
【问题描述】:

我已经在https://developer.microsoft.com/en-us/graph/docs/authorization/app_authorization 处完成了应用授权步骤,但似乎无法使请求生效。我一直收到错误说

对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问 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));
            }
        });

【问题讨论】:

    标签: ajax http graph oauth-2.0 authorization


    【解决方案1】:

    您使用了错误的 OAuth2 流程。您不应该在浏览器应用程序中使用授权宏代码流,因为当浏览器请求重定向 URL 时,您无法保证客户端机密和令牌到达服务器(令牌不在 URL 的哈希 # 部分)。

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

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

    【讨论】:

    • 我在尝试使用隐式授权工作流端点进行身份验证时遇到相同的“Access-Control-Allow-Origin”错误。
    • 您不能对 /auth 端点使用 XHR 请求。这就是 OAuth2 背后的基本思想——用户必须被重定向到 OAuth2 服务器,通过身份验证并重定向回来。所以客户端(你的应用程序)看不到用户的密码。 XHR 请求无法做到这一点。
    猜你喜欢
    • 2020-02-16
    • 2019-11-29
    • 2021-09-17
    • 2017-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-30
    相关资源
    最近更新 更多