Windows 域中的 NTLM SSO 如何工作?

5 ntlm active-directory windows-authentication single-sign-on

我使用NodeSSPI在 TypeScript 中进行了单点登录的概念验证。这有效,我获得了登录我们公司 AD 域的用户名 - 无需输入任何帐户信息或凭据。但我想详细了解这是如何实现的,因为它可以在 IE 和 Chrome 中开箱即用。我发现这篇关于 NTLM 的 MSDN 文章说:

  1. 登录用户的用户名发送到服务器
  2. 服务器生成随机数质询并发送给客户端
  3. 客户端使用用户密码哈希对质询进行加密并将其发送回服务器
  4. 服务器向 DC 发送用户名、质询和质询响应
  5. DC将PW与数据库进行比较,如果匹配则对用户进行身份验证

我特别想知道第 1 步和第 2 步:这是在哪里发生的?例如,用户名如何传输到服务器?它是http请求的一部分吗?我查看了 Chrome 开发人员工具的请求,但看不到任何标头或其他信息,表明我的 AD 用户名已发送到服务器。

请注意:这些问题仅适用于用户未提供凭据的 SSO!因为当用户输入他的凭据时,这是很清楚的。

Eug*_*ell 0

它是http请求的一部分吗?

是的。如RFC 4559中所述,您应该看到来自服务器响应的 WWW-Authenticate: Negotiate 标头,以及来自客户端的 Authorization 标头。

如果开发人员工具没有显示这一点,请返回网络捕获。