我在Windows Server 2008上运行NodeJS服务器。
服务器做得不多,但是我设置了401,WWW-Authenticate Negotiation的标头,我知道它可以使用默认的Kerberos身份验证,或者如果它不可用,那么使用NTLM。
我下载了fiddler并发现当我尝试访问服务器时,它尝试使用NTLM进行身份验证(提示我输入用户名和密码)而不是Kerberos,即使计算机与服务器位于同一个域中,当我执行运行命令" klist"它确实告诉我他有令牌,这意味着他已经使用Kerberos进行了身份验证(不是吗?)。
我的问题是如何使用Kerberos而不是NTLM进行身份验证 - 为什么他首先会去NTLM?
有什么想法吗?
答案 0 :(得分:1)
您的客户端可能无法获取该计算机的服务器票证。使用Wireshark并检查Kerberos TGS-REQ
消息。请搜索我的类似答案,我已经能够在这种情况下提供帮助。
答案 1 :(得分:0)
最有可能的是,您需要阅读Kerberos。您可能有TGT(票证授予票证),证明您已通过AD(KDC)验证。您仍然需要特定服务/服务器实例的ST(服务票证)。 HTTP /服务器名。为此,您需要为该服务注册SPN。 SPN必须注册到将解密ST的帐户。
显示你没有发送ST的提琴手表明你没有得到ST。你可能需要一个嗅探器,而不仅仅是提琴手。您将在端口88上看到您的工作站尝试从KDC请求ST,然后失败,然后回退到NTLM。你想看到ST req取回ST。这是一个伟大的首发,尽管来自2000 http://technet.microsoft.com/en-us/library/bb742431.aspx
要获得更有意义的帮助,我需要通过setspn -l和服务器主机名查看您的应用网址,SPN信息。
答案 2 :(得分:0)
由于这没有被标记为固定,我想我会添加一个对我有用的解决方案。 YMMV和我的环境一样,我们有多个具有信任关系的森林。
在我的例子中,运行浏览器的用户(因此生成HTTP GET)在DOMA中,但Web服务器已加入DOMB。当客户端试图找到HTTP/webserver.domainb.example.com
的SPN时,它正在DOMA中查找它。
我错误假设因为DOMA和DOMB之间存在双向信任关系,所以它会在DOMB中查找并执行此操作。不幸的是,它没有,你必须Configure Kerberos Forest Search Order。这可以在Windows 7或每个KDC(计算机配置→策略→管理模板→系统→KDC→使用林搜索顺序)上按客户端(计算机配置→策略→管理模板→系统→Kerberos→使用林搜索顺序)完成。 Windows Server 2008R2。
注意:Michael-O建议使用Wireshark并查找TGS-REQ消息,这使我找到了KFSO设置,这要归功于他。