使用NTLMv2进行集成Windows身份验证

时间:2017-11-16 12:49:36

标签: java tomcat ntlm windows-integrated-auth

我试图实现NTLMv2类型身份验证,但我在使其工作时遇到了问题。

我已将客户端配置为使用服务器Type-1hostname我来发送domain GET请求。 服务器响应401 Unauthorized质询以及WWW-Authorize: NTLM <base64-msg>。 base64包含以下内容:

byte[] msg = {(byte) 'N', (byte) 'T', (byte) 'L', (byte) 'M', (byte) 'S', (byte) 'S', (byte) 'P', (byte) '\0',
        0x02, 0, 0, 0, 0, 0, 0, 0, /*msg*/0x28, 0/*length*/, 0, 0, 0x01, (byte) 0b10000010, 0, 0,
        1, 2, 3, 4, 5, 6, 7, 8, //nonce
        0, 0, 0, 0, 0, 0, 0, 0}

在那之后,我希望Internet Explorer能够使用密码哈希自动发送包含用户名和加密质询的Type-3响应,但不会做任何事情。

我已在Local Intranet设置下设置了我的本地IP,并更改了自定义级别以使用Automatic logon with current username and password

我是否应该在收到服务器的质询响应后手动执行某些操作?我需要浏览器进行加密,因为我无法访问当前用户的凭据。

服务器端组件是Java application上运行的自定义Tomcat 8.0.45。虽然我认为它不应该是相关的,但是如果是这样的话,我会加上这个。另请注意,服务器有时也可能位于代理服务器后面(通常采用Apache HTTPD的形式)。

1 个答案:

答案 0 :(得分:0)

如果你使用IE浏览器,你不需要知道它是如何工作的,但下面有详细说明。

如果IE没有响应,则可能存在区域冲突。如果IP适用于多个区域,则事情会变得混乱。我确认您将网站添加到受信任的网站,并确保为该区域设置了自动设置。

我对Eric Glass的代码和解释感到非常幸运。 http://davenport.sourceforge.net/ntlm.html apendix中的Java工作,我很幸运将它转换为c#,几乎不需要改变任何东西。