2017-01-16 124 views
0

Я следую этому guide для интеграции моей системы с Windows AD. Поэтому, когда кто-то заходит на сайт пользователя домена Windows, он может автоматически войти в систему. Если пользователь не использует пользователя домена, я хочу, чтобы система возвращала нормальную страницу входа в html.Chrome show ERR_UNEXPECTED при неудачной аутентификации SPNEGO Kerberos

Теперь у меня есть проблема, когда я использую пользователя домена, он отлично работает. Но когда я использую пользователя, не являющегося доменом, мне возвращают страницу с ошибкой ERR_UNEXPECTED. Вы можете увидеть дамп tcp, систему уже вернуть 401 и страницу входа в систему html, но chrome show error.

Может ли кто-нибудь дать мне несколько советов?

виртуальной машины Java: 1.8.0_111

КАС-сервера ядро: 3.3

КАС-сервер-поддержка-SPNEGO: 3.3

Хром: 55

TCP самосвала потока с помощью Wireshark (не являющийся доменом)

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-аутентификацию: анонимный к http-заголовку, а не работает. – zhufeizzz

ответ

0

Избавьтесь от WWW-Authenticate: NTLM и используйте его WWW-Authenticate: Negotiate в заголовке HTTP. NTLM устарела Microsoft много лет назад в пользу Kerberos. На самом деле, никто больше не должен использовать NTLM и сомневаться, что любой из ваших клиентов. Эта линия в вашей сети след означает, что клиент Chrome использует NTLM:

Авторизация: Согласование TlRMTVNTUAABAAAAl4II4gAAAAAAAAAAAAAAAAAAAAAGAbEdAAAADw ==

+0

Я удалил «WWW-Authenticate: NTLM» из заголовка ответа сервера. Теперь, когда я использую пользователя, не являющегося доменом, chrome покажет мне базовое диалоговое окно auth, я должен нажать cancel botton, чтобы перейти на страницу входа. Ты знаешь почему? – zhufeizzz

+0

Это типичное поведение для клиента, не являющегося доменным веб-браузером, когда происходит сбой согласования SSO Kerberos - появляется диалоговое окно Basic Auth. Однако ваш исходный вопрос был сосредоточен на хроме, возвращающем страницу ошибок ERR_UNEXPECTED, и мы технически решили это. Чтобы справиться с этой новой ситуацией, я могу отредактировать свой ответ с новым предложением, но на самом деле это начинает проходить расширенную дискуссию и действительно несправедливо отвечать на вопрос. –