我试图实现NTLMv2类型身份验证,但我在使其工作时遇到了问题。
我已将客户端配置为使用服务器Type-1
和hostname
我来发送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
的形式)。
答案 0 :(得分:0)
如果你使用IE浏览器,你不需要知道它是如何工作的,但下面有详细说明。
如果IE没有响应,则可能存在区域冲突。如果IP适用于多个区域,则事情会变得混乱。我确认您将网站添加到受信任的网站,并确保为该区域设置了自动设置。
我对Eric Glass的代码和解释感到非常幸运。 http://davenport.sourceforge.net/ntlm.html apendix中的Java工作,我很幸运将它转换为c#,几乎不需要改变任何东西。