带有授权令牌的spa请求

本文关键字:spa 请求 令牌 授权 | 更新日期: 2023-09-27 18:07:57

我正在尝试制作一个基于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解决方案不工作

带有授权令牌的spa请求

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

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

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

我建议您使用在客户端后台应用程序中工作的令牌来查看问题是否已修复。