2017-01-16 115 views
0

我按照此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 
+0

需要對這裏的客戶端系統的更多信息:在您的AD域用戶使用未來加入到AD域的工作站,以及您的非域加入用戶使用未加入域的工作站(如便攜式計算機)?在這裏玩VPN嗎,還是每個人都在同一個內部網絡上? –

+0

是的,域用戶加入了正確的AD域,非域用戶加入了另一個AD域,並且我的網絡中沒有VPN。這個問題看起來像鉻行爲,當鉻找到域不匹配時,它只是返回錯誤。我試圖將WWW-Authenticate:Anonymous添加到http標題中,不起作用。 – zhufeizzz

回答

0

擺脫WWW-Authenticate: NTLM只能使用WWW-Authenticate: Negotiate在HTTP標頭中。微軟多年前就棄用NTLM來支持Kerberos。真的,沒有人應該再使用NTLM,並懷疑你的客戶是誰。這條線在您的網絡跟蹤意味着Chrome用戶端使用NTLM:

授權:協商 TlRMTVNTUAABAAAAl4II4gAAAAAAAAAAAAAAAAAAAAAGAbEdAAAADw ==

+0

我已經從服務器響應頭中刪除了「WWW-Authenticate:NTLM」。現在,當我使用非域用戶時,chrome會顯示一個基本的身份驗證對話框,我必須單擊取消按鈕,以便跳轉到登錄頁面。你知道爲什麼嗎? – zhufeizzz

+0

這是非域網絡瀏覽器客戶端在Kerberos SSO協商失敗時執行的典型行爲 - 彈出基本身份驗證對話框。你的原始問題,集中於chrome返回一個ERR_UNEXPECTED錯誤頁面,我們已經在技術上解決了這個問題。爲了應對這種新情況,我可以用一個新的建議來編輯我的答案,但是真的,這開始進入一個擴展的討論中,並且對於回答的人來說真的不公平。 –