通过 HTTP 的 NTLM 身份验证
NTLM authentication over HTTP
我想知道我们是否使用 NTLM (Windows) 身份验证 - 服务器如何确定用户是否已登录。因此,当我第一次访问该站点时,服务器告诉我他想通过 NTLM 对我进行身份验证:
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
然后客户端和服务器交换少量请求 - 实际上 challenge/response 阶段发生在这里,特别是服务器生成并向客户端发送质询,客户端根据它计算响应并发回,然后服务器联系域控制器进行验证它。好的,我们完成了。
但是当我通过身份验证并转到任何页面时,不再有任何身份验证 headers。服务器如何知道我已经通过身份验证?
P.S。我认为 IIS 通过 MAC 或 IP 绑定客户端,但事实并非如此。 NTLM 适用于单个浏览器。也没有找到 NTLM 特定的 cookie。
HTTP 上的 NTLM 使用 HTTP persistent connection 或 http keep-alive。
创建了一个连接,然后为 session 的其余部分保持打开状态。
如果使用相同的经过身份验证的连接,则无需再发送身份验证 headers。
这也是 NTLM 无法与某些不支持 keep-alive 连接的代理服务器一起工作的原因。
我想知道我们是否使用 NTLM (Windows) 身份验证 - 服务器如何确定用户是否已登录。因此,当我第一次访问该站点时,服务器告诉我他想通过 NTLM 对我进行身份验证:
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
然后客户端和服务器交换少量请求 - 实际上 challenge/response 阶段发生在这里,特别是服务器生成并向客户端发送质询,客户端根据它计算响应并发回,然后服务器联系域控制器进行验证它。好的,我们完成了。
但是当我通过身份验证并转到任何页面时,不再有任何身份验证 headers。服务器如何知道我已经通过身份验证?
P.S。我认为 IIS 通过 MAC 或 IP 绑定客户端,但事实并非如此。 NTLM 适用于单个浏览器。也没有找到 NTLM 特定的 cookie。
HTTP 上的 NTLM 使用 HTTP persistent connection 或 http keep-alive。
创建了一个连接,然后为 session 的其余部分保持打开状态。
如果使用相同的经过身份验证的连接,则无需再发送身份验证 headers。
这也是 NTLM 无法与某些不支持 keep-alive 连接的代理服务器一起工作的原因。