在我的网站上,在Internet Explorer中运行时发生了一些奇怪的事情。我的网站和API是单独托管的。 API具有基于令牌的授权的匿名身份验证。 MVC网站正在进行Windows身份验证。大多数时候一切都按预期工作。但有时会发生的情况是从javascript调用API时,我的授权将更改为NTLM
而不是Bearer
。我正在给出相同场景的截图。
成功的API调用:
401未经授权的电话:
我的Ajax如下:
$.ajax({
url: src,
type: 'GET',
cache: false,
async: true,
data: (parameters),
headers: {
'Authorization': 'Bearer ' + sessionStorage.getItem('token')
},
contentType: 'application/json'
dataType: 'json',
success: successCallback,
error: function (xhr, textStatus, errorThrown) {
ErrorPopup("error occur");
}
,
beforeSend: function (xhr, settings) { xhr.setRequestHeader('Authorization', 'Bearer ' + sessionStorage.getItem('token')); }
});
我已经调试了所有API调用,并且授权标头始终设置为Bearer ...
,某种方式NTLM
正在以某种方式控制它并使我的API调用未经授权。请分享一些见解如何解决这个问题。我无法在IIS
中更改身份验证,因为它超出了我的控制范围。如果您还需要更多输入,我也可以提供。
答案 0 :(得分:0)
您的授权标头(标头数组+ beforeSend)看起来有冗余。删除其中一个并进行测试(原因:RFC 2616表示应该在同一行连接多个具有相同名称的标头,并且服务器可能正在回复NTLM授权请求,而这种请求是不允许的)。