最近一个项目拿到客户那运行不了。原来我的这个项目要和另一个系统通过http的接口进行通讯。但在客户的生产环境中,那套系统将web应用的登录和Windows Domain的登录结合,做了一个sso单点登录(jcifs实现)。那么我必须要修改我的程序,好自动登录Windows Domain。
通过抓包分析,局域网使用的是NTLM 协议。
当通过浏览器访问被NTLM协议保护的资源的时候,NTLM的认证方式和流程如下:1: C --> S GET ...
2: C
WWW-Authenticate: NTLM
3: C --> S GET ...
Authorization: NTLM
4: C
WWW-Authenticate: NTLM
5: C --> S GET ...
Authorization: NTLM
6: C
Type-1消息包括机器名、Domain等
Type-2消息包括server发出的NTLM challenge
Type-3消息包括用户名、机器名、Domain、以及两个根据server发出的challenge计算出的response,这里response是基于challenge和当前用户的登录密码计算而得PS:在第二步时,当浏览器接收到一个401 Unauthorized的response,会弹出该对话框让用户输入用户名、密码。(ie有可能会自动登录)
我的程序(client)要和另个程序走http接