gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 23:32:05 27 4
gpt4 key购买 nike

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

进一步的调查显示,如果我们的 session 超时并且浏览器被重新验证,那么我们将在大约 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。)如果 session 已经有效并且服务器已获得您的授权,则它会在没有正文的情况下允许请求通过,并将导致错误服务器(假设您的 POST 需要正文。)

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

  • 来自客户端的请求(带有 POST 正文)-> 服务器返回 401www-authenticate:negotiate, www-authenticate:NTLM
  • 客户端发送带有 NTLM token 的附加请求(无帖子正文)-> 服务器返回 401NTLM token
  • 客户端通过 session 发送第三个请求(带有 POST 正文),服务器返回200

通过此优化

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

出现问题

  • 客户端期待 401 并发送 NTLM token (无正文) -> 服务器处理请求并收到内部错误(可能是 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 session 超时或 session 无效并且它从服务器返回 401,它就会想要重新身份验证此后每 1-2 分钟验证一次。这可能与您在身份验证时所在的 URL 有关,因为您可能不在根目录下。我提供的第一个链接详细介绍了 IE 对 URL 的挑剔,以及它如何根据路径猜测哪些内容应该授权,哪些内容不应该授权。

相关文章:

Zero Length POSTS

NTLM Pre-Auth

NTLM Pre-Auth

NTLM Pre-Auth jcifs

关于angularjs - IE 在使用 NTLM 身份验证时随机发送空 POST 正文(使用 Angular 到 Spring),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40918017/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com