我正在尝试创建一个基于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解决方案拒绝运作。
答案 0 :(得分:0)
根据401错误,您使用的令牌似乎无法为您的服务进行身份验证。
一个可能的原因是您使用了不正确的资源令牌。 您可以解析来自here的令牌,以检查令牌中的 aud 声明是否与您为Web API配置的观众相匹配。
此错误的另一个原因是您使用过期令牌时。
我建议您使用适用于客户端后台应用程序的令牌来查看问题是否已修复。