在调用API时,会在AJAX调用中自动添加NTLM而不是Bearer

时间:2018-01-08 04:32:01

标签: ajax internet-explorer authorization ntlm bearer-token

在我的网站上,在Internet Explorer中运行时发生了一些奇怪的事情。我的网站和API是单独托管的。 API具有基于令牌的授权的匿名身份验证。 MVC网站正在进行Windows身份验证。大多数时候一切都按预期工作。但有时会发生的情况是从javascript调用API时,我的授权将更改为NTLM而不是Bearer。我正在给出相同场景的截图。

成功的API调用:

enter image description here

401未经授权的电话:

enter image description here

我的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中更改身份验证,因为它超出了我的控制范围。如果您还需要更多输入,我也可以提供。

1 个答案:

答案 0 :(得分:0)

您的授权标头(标头数组+ beforeSend)看起来有冗余。删除其中一个并进行测试(原因:RFC 2616表示应该在同一行连接多个具有相同名称的标头,并且服务器可能正在回复NTLM授权请求,而这种请求是不允许的)。