【问题标题】:NTLM is automatically added instead of Bearer in AJAX Calls while calling API调用 API 时自动添加 NTLM 而不是 AJAX 调用中的 Bearer
【发布时间】:2018-01-08 04:32:01
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    您的授权标头(标头数组 + beforeSend)中似乎存在冗余。删除其中一个并进行测试(原因:RFC 2616 说应该在同一行上连接多个具有相同名称的标头,并且服务器可能正在以 NTLM 授权请求回复它不允许的此类请求)。

    【讨论】:

    • 我进行了更改并进行了部署。它工作了一段时间,直到我关闭浏览器。这就像如果 IE 从其先前的请求中获取 NTLM 标头,它只是继续添加到后续请求中的所有 AJAX 调用。他们都在未经授权的情况下进入401。请注意:NTLM 由 IE 自动添加以授权 MVC 网页。
    • 您的意思是这些更改改善了行为吗?
    • 也许,看看缓存问题(cache: false)
    • 这里要注意的另一件事。如果我在私人模式下打开 IE。该网站运行良好。再次回到原始版本,该网站再次出现异常。在chorme我也没有遇到这样的问题。
    • 私人模式禁用缓存。正如我所建议的,将 cache : false 添加到您的 AJAX 调用中。
    猜你喜欢
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    • 2015-11-13
    • 2012-06-12
    • 2012-10-17
    相关资源
    最近更新 更多