【问题标题】:ADAL.js SPA-request with Authorization token带有授权令牌的 ADAL.js SPA 请求
【发布时间】:2016-09-21 11:05:52
【问题描述】:

我正在尝试制作一个基于 AzureAD 的应用程序。我有一个功能正常的后端,我还有一个功能性的客户端服务,它可以通过在标头中传递访问令牌来连接到应用程序。

但是,当我尝试使用 ADAL.js 通过此代码进行授权时:

    $.ajax({
        url: '/api/folder',
        type: 'POST',
        headers: { 'Authorization': 'Bearer ' + getAuthHeaders(), },
        xhr: function () {
            myXhr = $.ajaxSettings.xhr();
            if (myXhr.upload) {
                myXhr.upload.addEventListener('progress', progressBar, false);
            }
            return myXhr;
        },
        success: completeHandler = function (data) {
            alert('Success!');
            modal.remove();
            updateFileBrowsers(folderName);
        },
        error: errorHandler = function (jqXHR, textStatus, errorThrown) {
            alert('Fail! :(');
        },
        data: formData,
        cache: false,
        contentType: false,
        processData: false
    }, 'json');

我只收到来自服务器的 401 响应。控制器非常简单,它在 API 访问点上有整个控制器的 [Authorize] 符号。

我检查了令牌不为空,但事实并非如此。我已将应用程序添加到 Azure 应用程序。当使用登录并设置标头的客户端后台应用程序使用的控制器时,完全相同的方法会生成成功的连接:

httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);

我能看到的唯一区别是一个使用 ADAL.js 和一个使用 .NET 本机类来设置请求标头。

澄清:httpClient 就像一个魅力。 SPA 解决方案拒绝工作。

【问题讨论】:

    标签: c# jquery asp.net azure-active-directory adal.js


    【解决方案1】:

    根据 401 错误,您使用的令牌似乎无法为您的服务进行身份验证。

    一个可能的原因是您为资源使用了不正确的令牌。 您可以从 here 解析令牌,以检查令牌中的 aud 声明是否与您为 Web API 配置的 audience 匹配。

    此错误的另一个原因是您使用了过期的令牌。

    我建议您使用适用于客户端后台应用程序的令牌来查看问题是否已解决。

    【讨论】:

      猜你喜欢
      • 2015-11-27
      • 2020-02-13
      • 2017-06-12
      • 1970-01-01
      • 1970-01-01
      • 2017-12-26
      • 2016-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多