0

我在 Windows Server 2008 上运行 NodeJS 服务器。

服务器没有做太多,但我将标头设置为 401,WWW-Authenticate Negotiation,我知道它可以使用他的默认 Kerberos 身份验证,或者如果它不可用,则使用 NTLM。

我下载了 fiddler 并发现当我尝试访问服务器时,它会尝试使用 NTLM(提示我输入用户名和密码)而不是 Kerberos 进行身份验证,即使计算机与服务器位于同一域并且当我运行命令时“klist”它确实告诉我他有令牌,这意味着他已经通过 Kerberos 进行了身份验证(不是吗?)。

我的问题是如何让它使用 Kerberos 而不是 NTLM 进行身份验证 - 为什么他首先要使用 NTLM?

有任何想法吗?

4

3 回答 3

1

您的客户端可能无法获得该机器的服务器票证。使用 Wireshark 并检查 KerberosTGS-REQ消息。请搜索我的类似答案,我已经能够在这种情况下提供帮助。

于 2014-07-15T11:19:43.320 回答
0

很可能,您需要阅读 Kerberos。您可能有一个 TGT (ticket granting ticket) ,它证明您已通过 AD (KDC) 的身份验证。对于实例化的特定服务/服务器,您仍然需要 ST(服务票证)。http/服务器名。为此,您需要为该服务注册一个 SPN。SPN 必须注册到将解密 ST 的帐户。

Fiddler 表明您没有发送 ST 表明您没有收到。您可能需要一个嗅探器,而不仅仅是 Fiddler。您将看到,在端口 88 上,您的工作站尝试从 KDC 请求 ST,然后失败,然后回退到 NTLM。你想看到 ST req 得到一个 ST。

这是一个很好的开端,尽管从 2000 年开始 http://technet.microsoft.com/en-us/library/bb742431.aspx

要获得更有意义的帮助,我需要通过 setspn -l 查看您的应用 URL、SPN 信息和服务器主机名。

于 2014-07-15T15:04:15.397 回答
0

由于这没有被标记为已修复,我想我会添加一个对我有用的解决方案。YMMV 在我的环境中,我们有多个具有信任关系的森林。

在我的例子中,运行浏览器(并因此进行 HTTP GET)的用户在 DOMA 中,但 Web 服务器加入了 DOMB。当客户端试图找到 的 SPN 时HTTP/webserver.domainb.example.com,它正在 DOMA 中寻找它。

错误地认为,因为 DOMA 和 DOMB 之间存在双向信任关系,所以它会想办法查看 DOMB 并这样做。不幸的是,它没有,您必须配置 Kerberos 森林搜索顺序。这可以在 Windows 7 上按客户端(计算机配置 → 策略 → 管理模板 → 系统 → Kerberos → 使用森林搜索顺序)或每个 KDC(计算机配置 → 策略 → 管理模板 → 系统 → KDC → 使用森林搜索顺序)完成Windows 服务器 2008R2。

注意:Michael-O建议使用 Wireshark 并查找 TGS-REQ 消息,这让我非常感谢他找到了 KFSO 设置。

于 2016-04-14T14:10:58.680 回答