IE 在使用 NTLM 身份验证时随机发送空 POST 正文(使用 Angular 到 Spring)

2023-12-02

我们发现 IE 11 中看似随机的调用缺少 POST。经过进一步检查,来自浏览器的请求包含 NTLM 协商令牌。我们有时也会在 GET 上看到此令牌,但它们不受主体问题的影响,因为它们没有主体问题。 Chrome和FF没有这个问题。

进一步的调查表明,如果我们的会话超时并且浏览器被重新验证,那么我们将在大约 1 - 2 分钟的时间间隔内持续看到此问题。据我了解,如果 IE“期望”401,那么它不会包含 POST 正文,因为它期望再次发生 NTLM 握手。

我们有一个 Angular 应用程序(目前混合了 Angular 1 和 2,但在此之前出现在 1 中)。 Angular 应用程序对我们的 Spring boot 应用程序进行静态 Web 服务调用。我们使用 waffle 进行 NTLM 身份验证

// Shiro-Waffle / Security
'com.github.dblock.waffle:waffle-parent:1.7.3',
'com.github.dblock.waffle:waffle-shiro:1.7.3',
'org.apache.shiro:shiro-core:1.2.3',
'org.apache.shiro:shiro-web:1.2.3',

https://blogs.msdn.microsoft.com/ieinternals/2010/11/21/challenge-response-authentication-and-zero-length-posts/

我有一个蹩脚的解决方法,我将在下面发布作为答案,但我根本不喜欢它。


好的,我找到了一个注册表破解方法。基本上,IE 会主动发送 NTLM 凭据,而无需从服务器发出 401。发送“预身份验证”时,IE 将省略 POST 正文(如果请求是 POST。)如果会话已经有效并且服务器已获得您的授权,则它会在没有正文的情况下允许请求通过,并会导致错误服务器(假设您的 POST 需要正文。)

所以正常的 NTLM 协商看起来像

  • 来自客户端的请求(带有 POST 正文)-> 服务器返回 401 www-验证:协商,www-验证:NTLM
  • 客户端发送 带有 NTLM 令牌的附加请求(无帖子正文)-> 服务器返回 401 NTLM代币
  • 客户端通过会话发送第三个请求(带有 POST 正文),服务器返回 200

通过这个优化

  • 客户端期望 401 并发送 NTLM 令牌(无正文)-> 服务器返回 401 和服务器令牌
  • 客户端发送第二个带有会话的请求(带有正文)-> 服务器返回 200

出现问题

  • 客户端期望 401 并发送 NTLM 令牌(无正文)-> 服务器处理请求并收到内部错误(可能是 500)

要添加的注册表项会阻止这种“优化”

HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Internet Settings/ 
Add the following registry value: 
Value Name: DisableNTLMPreAuth
Data Type: REG_DWORD
Value: 1

或者将这些条目保存到计算机上的 .reg 文件中,然后双击它

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\]
"DisableNTLMPreauth"=dword:00000001

我不确定为什么 IE 认为它必须重新验证,但从广泛的测试来看,一旦 IE 会话超时或会话无效并且它从服务器返回 401,它就会每隔 1 重新验证一次之后-2分钟。这可能与您在身份验证时所在的 URL 有关,因为您可能不在根目录下。我提供的第一个链接详细介绍了 IE 对 URL 的挑剔,以及它如何根据路径猜测哪些内容应该授权,哪些内容不应该授权。

相关文章:

零长度帖子

NTLM 预授权

NTLM 预授权

NTLM 预授权 jcifs

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IE 在使用 NTLM 身份验证时随机发送空 POST 正文(使用 Angular 到 Spring) 的相关文章

  • 指令可以从父作用域中删除自身吗

    假设我有以下代码 div div div div 我的自定义指令有一个独立的范围 定义为 app directive customDirective function log return restrict E templateUrl te
  • 在单页应用程序上重用 Google Maps API 实例

    假设我有一个单页应用程序 Angular JS 应用程序 并且我在元素 id 上绘制一个 Google 地图实例googleMap var mapInstance new google maps Map document getElemen
  • 是否可以在 ASP.NET Web API 和 SPA 中使用基于 cookie 的身份验证?

    我想创建基于 angularjs 前端和 ASP NET Web API 的 Web 应用程序 我需要创建安全 api 但我无法在将实施此 Web 应用程序的公司服务器上使用基于令牌的身份验证 是否可以对 SPA 和 ASP NET Web
  • 如何禁用 Angular 数据表中数据的初始排序?

    我正在使用角度数据表 并且只有一列 当我绑定它时 数据按升序排列 而我想按我收到的顺序显示它 有人可以帮忙吗 控制器 var vm this vm dtOptions DTOptionsBuilder newOptions withButt
  • 如何在滚动时保持这些 tagHover 的位置靠近标签并且 tagHover 具有固定位置?

    https plnkr co edit PuP3f71kCjkqgjjMkgNS p preview https plnkr co edit PuP3f71kCjkqgjjMkgNS p preview 下面还有一个 stackoverfl
  • 指令中的 Angular + 茉莉花 + 模拟 $stateParams

    在指令中模拟 stateParams 的最佳方法是什么 stateParam成员会根据测试而改变 我可以使用 controller ctrl stateParams 轻松模拟控制器中的 stateParams 但不知道如何修改注入指令的 s
  • 实施令牌认证

    在我的网页中实施令牌身份验证必须遵循哪些步骤 任何摘要或链接将不胜感激 我想实现类似于 Facebook 或 Google 的功能 首次客户端登录并接收令牌 然后在下一步操作中使用它 我还阅读了有关 OAuth 的内容 但我不想让第三方访问
  • Spring Security从数据库获取用户ID

    我正在使用 spring security 进行身份验证并成功获得User目的 org springframework security core userdetails User 任何我需要的地方 但我想要UserId还有 春天里没有的U
  • 如何发布数组多维角度js

    我在 angularjs 中有一个数组 示例如下 scope order qty 20 scope order adress Bekasi scope order city Bekasi 这个数组可以用这个代码发布 http method
  • 离子旋转器未显示

    我用 http 请求填充 Ionic 集合重复列表 但我不想将所有内容直接加载到 DOM 中 因此 我只显示其中一些项目 并在您向下滚动时添加其余项目 为此我实现了无限滚动功能 当我到达页面底部时 它应该显示一个旋转器 但它没有 这些物品至
  • AngularJS 输入字段未从控制器内的 setTimeout 更新

    我正在使用 AngularJS 支持的页面 并且我需要在只读输入文本字段内显示正在运行的时钟 与data ng model 为了模拟运行的时钟 我使用了 JavaScript 调度程序setTimeout每 1000 毫秒调用一个函数 该函
  • 为什么混合插值和表达式是不好的做法

    来自文档 在表达式内嵌入插值标记 Note AngularJS 指令属性采用任一表达式or带有嵌入表达式的插值标记 已经被考虑了不好的做法将插值标记嵌入表达式中 AngularJS 开发人员指南 插值 https docs angularj
  • 测试 AngularJs 的 $http.defaults.headers.common 是否设置了特定标头

    所以我对 JavaScript 和 AngularJS 的世界还是个新手 因此我的代码还没有达到应有的水平 但它正在改进 尽管如此 我开始学习并实现一个带有 REST 后端的简单登录页面 提交登录表单后 将返回一个身份验证令牌并将其设置为默
  • Spring Neo4j不保存数据

    我创建了新的应用程序 它应该通过存储库将 Person 对象保存到 neo4j 中 但是当我使用 findAll 方法时 我没有任何项目 我正在使用 Spring Boot 这是我的配置 package com example import
  • Spring应用中Eureka健康检查的问题

    我正在开发一个基于 Spring 的应用程序 其中包含多个微服务 我的一个微服务充当尤里卡服务器 到目前为止一切正常 在我所有其他微服务中 用 EnableEurekaClient 我想启用这样的健康检查 应用程序 yml eureka c
  • Hibernate 挂起或引发延迟初始化,没有会话或会话已关闭

    我正在增强旧的 Spring Hibernate 应用程序 但我陷入困境 我有一种方法可以读取 3000 多行长的文件 每行都有一条记录 必须与数据库中的某些内容进行比较 然后必须将寄存器添加到数据库 多对多表 表和关系是 Branch h
  • jquery.find() 可以只选择直接子项吗?

    我应该向 jQuery find 提供什么参数来选择元素子元素而不选择其他元素 我不能用 gt 引导选择器 而用 将选择所有后代 而不仅仅是直接子代 我知道 jQuery children 但这是一个库 因此用户能够提供自己的选择器 并且我
  • 如何在 Spring-JUnit 测试中设置 JNDI 查找?

    我正在使用 Maven 3 0 3 Spring 3 1 0 RELEASE 和 JUnit 4 8 1 如何在容器外部创建 JNDI 功能 在我的例子中是 JBoss 我认为 Spring 的 jndiTemplate 可以解决这个问题
  • 如何在 Spring 中禁用使用 @Component 注释创建 bean?

    我的项目中有一些用于重构逻辑的通用接口 它看起来大约是这样的 public interface RefactorAwareEntryPoint default boolean doRefactor if EventLogService wa
  • Selenium RC上传文件

    我可以使用上传文件吗selenium RC在IE中 简短的回答是 一般来说你不能 http wiki openqa org display SEL Selenium Core FAQ SeleniumCoreFAQ Ican 27tseem

随机推荐