当SPNEGO Kerberos身份验证失败时,Chrome显示ERR_UNEXPECTED
我按照此guide将我的系统与Windows AD集成。所以当有人登录windows域用户时,他可以自动登录到cas。如果用户不使用域用户,我希望系统返回正常的html登录页面。当SPNEGO Kerberos身份验证失败时,Chrome显示ERR_UNEXPECTED
现在我有一个问题,当我使用域用户时,它工作正常。但是当我使用非域用户时,chrome返回ERR_UNEXPECTED错误页面给我。你可以看到tcp dump,系统已经返回401和登录页面html,但是chrome显示错误。
任何人都可以给我一些建议吗?
JVM:1.8.0_111
CAS-服务器核:3.3
CAS-服务器支持-SPNEGO:3.3
铬:通过Wireshark的55
TCP转储流(非域名用户)
GET /cas/login?service=http%3A%2F%2Fserver.ictsm.com%3A8080%2Fapp%2F&_validateRequest_=7RBrB6AIqjijhw5c4LjTBvc1vjpHJHWafif1MXGmMr8ZyI22thbzCtqTYkCUfKOn HTTP/1.1
Host: server.ictsm.com:8080
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
DNT: 1
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8
Cookie: JSESSIONID=3A632B243F57094E9468F972D2BE2E04A48835CCEE575DC9F8B2527FA81E23AD6D48BBF69A6D35623080096949F1FB8092F4
HTTP/1.1 401 Unauthorized
Server: nginx
Date: Mon, 16 Jan 2017 07:19:00 GMT
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Pragma: no-cache
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Cache-Control: no-cache
WWW-Authenticate: NTLM
WWW-Authenticate: Negotiate
Content-Language: zh-CN
my login page html
GET /cas/login?service=http%3A%2F%2Fserver.ictsm.com%3A8080%2Fapp%2F&_validateRequest_=7RBrB6AIqjijhw5c4LjTBvc1vjpHJHWafif1MXGmMr8ZyI22thbzCtqTYkCUfKOn HTTP/1.1
Host: server.ictsm.com:8080
Connection: keep-alive
Cache-Control: max-age=0
Authorization: Negotiate TlRMTVNTUAABAAAAl4II4gAAAAAAAAAAAAAAAAAAAAAGAbEdAAAADw==
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
DNT: 1
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8
Cookie: JSESSIONID=3A632B243F57094E9468F972D2BE2E04A48835CCEE575DC9F8B2527FA81E23AD6D48BBF69A6D35623080096949F1FB8092F4
HTTP/1.1 401 Unauthorized
Server: nginx
Date: Mon, 16 Jan 2017 07:19:00 GMT
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Pragma: no-cache
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Cache-Control: no-cache
WWW-Authenticate: Negotiate TlRMTVNTUAACAAAAEgASADAAAAAFAoEAAAAAAAAAAAAAAAAAAAAAADoAOgBCAAAAaQBjAHQAcwBtAC4AYwBvAG0AAgASAGkAYwB0AHMAbQAuAGMAbwBtAAEAHABKAEMASQBGAFMAMQAzAF8AMQA3ADQAXwA2AEMAAAAAAA==
Content-Language: zh-CN
my login page html
摆脱WWW-Authenticate: NTLM
只能使用WWW-Authenticate: Negotiate
在HTTP标头中。微软多年前就弃用NTLM来支持Kerberos。真的,没有人应该再使用NTLM,并怀疑你的客户是谁。这条线在您的网络跟踪意味着Chrome用户端使用NTLM:
授权:协商 TlRMTVNTUAABAAAAl4II4gAAAAAAAAAAAAAAAAAAAAAGAbEdAAAADw ==
我已经从服务器响应头中删除了“WWW-Authenticate:NTLM”。现在,当我使用非域用户时,chrome会显示一个基本的身份验证对话框,我必须单击取消按钮,以便跳转到登录页面。你知道为什么吗? – zhufeizzz
这是非域网络浏览器客户端在Kerberos SSO协商失败时执行的典型行为 - 弹出基本身份验证对话框。你的原始问题,集中于chrome返回一个ERR_UNEXPECTED错误页面,我们已经在技术上解决了这个问题。为了应对这种新情况,我可以用一个新的建议来编辑我的答案,但是真的,这开始进入一个扩展的讨论中,并且对于回答的人来说真的不公平。 –
需要对这里的客户端系统的更多信息:在您的AD域用户使用未来加入到AD域的工作站,以及您的非域加入用户使用未加入域的工作站(如便携式计算机)?在这里玩VPN吗,还是每个人都在同一个内部网络上? –
是的,域用户加入了正确的AD域,非域用户加入了另一个AD域,并且我的网络中没有VPN。这个问题看起来像铬行为,当铬找到域不匹配时,它只是返回错误。我试图将WWW-Authenticate:Anonymous添加到http标题中,不起作用。 – zhufeizzz