|
|
|
SPNEGO не авторизует пользователей с большим числом групп.
|
|||
|---|---|---|---|
|
#18+
На работе поставили задачу - сделать в уже имеющемся java веб-приложении сквозную авторизацию с Windows учеткой (Active Directory). Сейчас работает следующая связка tomcat 7.0.56+spnego_r7 (+nginx proxy) на linux (RHEL), jdk 8_20. Все неплохо работает, логин Windows получает servlet - request.getUserPrincipal(). Но все работает только для пользователей (AD) с несколькими группами (2-3 memberOf). Для пользователей с большим количеством групп (memberOf) в браузерах (IE, Chrome, Firefox) вылазит ошибка “ERR::UNEXPECTED”: provisional headers are shown. Логи пусты, хоть я и выставил следующие параметры: -Dsun.security.krb5.debug=true -Dsun.security.spnego.debug=all И <init-param> <param-name>spnego.logger.level</param-name> <param-value>1</param-value> </init-param> Но в логах все равно показываются только успешные попытки аутентификации. Ошибок нет. Я повышал buffers, header в nginx и tomcat до 64k (так же ради эксперимента повышал до 1 мб, но потом вернул назад). Выставил MaxTokenSize в Windows реестре на необходимый максимум. Пробовал так же различные связки версий JDK и tomcat. И все равно не работает, пробовал различные вариации Может кто подскажет, что поправить, чтобы успешно аутентифицировались пользователи и с большим количеством привязанных групп? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2015, 16:02 |
|
||
|
SPNEGO не авторизует пользователей с большим числом групп.
|
|||
|---|---|---|---|
|
#18+
А сам сервер на kdc ходит напрямую или через прокси? Возможно, в параметры запуска надо добавить -Dhttp.nonProxyHosts ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2015, 16:47 |
|
||
|
SPNEGO не авторизует пользователей с большим числом групп.
|
|||
|---|---|---|---|
|
#18+
нечто подобное было с самим Active Directory он по умолчанию возвращает не всех пользователей ,а какое-то количество (не более 1000).. возможно нужно смотреть в эту сторону ... так например , не работало получение списка всех почтовых адресов (возвращались только 200 шт) в thunderbird / так же в коде c# (System.DirectoryServices.dll Свойство DirectorySearcher.PageSize) итд ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2015, 17:50 |
|
||
|
SPNEGO не авторизует пользователей с большим числом групп.
|
|||
|---|---|---|---|
|
#18+
http://docs.spring.io/spring-ldap/docs/2.0.4.CI-SNAPSHOT/reference/ как пример работы ... попробуйте написать маленький тест и посмотрите работает ли он? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2015, 17:51 |
|
||
|
SPNEGO не авторизует пользователей с большим числом групп.
|
|||
|---|---|---|---|
|
#18+
Все стопорится на 7 пункте, а именно при импортировании полученного токена в браузер. В klist при заходе на сайт ключ появляется. Но потом в браузере красуется следующее «Provisional headers are shown» - обычно такое сообщение выходит, когда какое-то расширение браузера блокирует запросы/контент. Но данный скриншот сделан в режиме инкогнито, где все расширения заблокированы, тем более это происходит во всех браузерах. https://drive.google.com/file/d/0Bxqnx1qVPbX6dGtoS0M0RjltUHM/view При логировании nginx так же видно, что пользователь отправляет пустые хедеры (в случае если пользователь состоит в большом количестве групп). Т.е. нужный header Authorization даже не доходит до nginx, tomcat. При успешной аутентификации получается так: https://drive.google.com/file/d/0Bxqnx1qVPbX6c0xnZmxWcHlWeGM/view Есть у кого какие мысли, почему браузер не может получить ключ, хотя он уже получет от AD? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2015, 08:16 |
|
||
|
SPNEGO не авторизует пользователей с большим числом групп.
|
|||
|---|---|---|---|
|
#18+
AlexeyKh24, если в сети есть прокси, и локальные адреса не добавлены в исключения, то передаваемые заголовки могут резаться на прокси. По какому критерию - может знать только админ. Например, если они слишком большие. Проверьте ваши настройки, в том числе и на сервере приложений (-Dhttp.nonProxyHosts) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2015, 09:35 |
|
||
|
SPNEGO не авторизует пользователей с большим числом групп.
|
|||
|---|---|---|---|
|
#18+
ivanra, выставил -Dhttp.nonProxyHosts="*.rt.ru" - не помогло. Вообще сервер приложений, nginx и kdc находятся во внутренней сети, так что они изначально без прокси общаются. Мне непонятно, почему браузер не помещает в request header ключ, хотя пользователь его получает при заходе на сайт (видно в klist). Может на сервере AD есть какие-то волшебные настройки? Админы же говорят, что ничего не знают. Меня если честно напрягает данная задача, т.к. затуп в ней не в программистской, а в админской части. Но надо как-то решать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2015, 12:13 |
|
||
|
SPNEGO не авторизует пользователей с большим числом групп.
|
|||
|---|---|---|---|
|
#18+
AlexeyKh24, а у клиентов настроен обход прокси при обращении к локальным адресам? А то вполне может быть, что браузер как раз заголовок посылает, а до сервера он не доходит, так как обрезается на прокси. Или в консоли браузера видно, что заголовок не отправляется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2015, 12:58 |
|
||
|
SPNEGO не авторизует пользователей с большим числом групп.
|
|||
|---|---|---|---|
|
#18+
Да все описание проблемы мутное какое-то. Вот понятно, что браузер, т.е. клиентская часть какого-то веб-приложения, должна отправить определенный заголовок куда-то, но не отправляет. При этом эта самая клиентская часть должна до того этот заголовок откуда-то получить. Все эти операции выполняются по протоколу http. И все ответы и запросы видны в консоли браузера. И на джава скрипт, который сначала что-то от кого-то принимает, а потом отдает в другое место тоже можно посмотреть. Сначала надо посмотреть на то, что было принято. Прежде чем шуметь о том, что оно почему-то не пересылается дальше. Чем оно отличается от того, что нормально принимается и пересылается (по содержимому). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2015, 13:20 |
|
||
|
SPNEGO не авторизует пользователей с большим числом групп.
|
|||
|---|---|---|---|
|
#18+
yelena, +1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2015, 13:30 |
|
||
|
SPNEGO не авторизует пользователей с большим числом групп.
|
|||
|---|---|---|---|
|
#18+
ivanra, да, обход прокси настроен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2015, 14:09 |
|
||
|
SPNEGO не авторизует пользователей с большим числом групп.
|
|||
|---|---|---|---|
|
#18+
А что в консоли браузера? На 7 шагу он должен отправлять запрос с заголовком Код: powershell 1. и получать от сервера ответ с заголовком Код: powershell 1. - если такой запрос не отправлятся, то к админам - если отправляется, но не доходит до сервера - смотрим кто крадет этот заголовок (например, прокси) - если доходит до сервера, то тут, скорее всего, дело не в аутентификации, а в авторизации (spnego протокол ни при чем). Надо смотреть ту часть логин-модуля, которая занимается ролями пользователя ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2015, 14:20 |
|
||
|
SPNEGO не авторизует пользователей с большим числом групп.
|
|||
|---|---|---|---|
|
#18+
ivanra, да, из фото же видно, что сам браузер почему-то не отправляет хедер в случае, если пользователю прикреплено много групп (от 10). И я не знаю, как браузер получает хеш из kerberos ключа, все это инкапсулировано. В итоге на сервере поэтому и нет ошибочных логов, т.к. он попросту не видит, что ему что-то приходит. yelena, все что вы описали - инкапсулировано от моих глаз, и почти никак не зависит от моих действий. js в явном виде (именно на этой странице) нет. Код страницы - обычный сервлет, внутри которого вызывается getUserPrincipalName (метод тоже "из коробки"). Остальное все делается с помощью spnego и самого AD, ну и встроенных в Windows клиента процессов по синхронизации работы браузеров и kerberos/AD. Если рассматривать случай, когда аутентификация не проходит, то (как видно по фото) никаких особо полезных логов в Networke браузера нет, пробовал в различных браузерах. Настройка spnego: krb5.conf, login.conf, web.xml - стандартная. И как я уже упоминал, с количеством групп не более 3 - пускает. Большие хедеры к nginx/tomcat проходят, проверял вручную. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2015, 14:22 |
|
||
|
SPNEGO не авторизует пользователей с большим числом групп.
|
|||
|---|---|---|---|
|
#18+
ivanra, вот именно, что он ничего не отправляет, пишет только "provisional headers are shown". Показывал я это уже админам. Молчат, не хотят разбираться. Точнее говорят, что это я "чего то наколбасил" такого, что не работает. Но сервлет по этому url'у очень прост. Видимо ждут, когда сроки начнут гореть, а начальство из Москвы начнет негодовать :-) Я понимаю, если бы совсем ничего не работало. Но работает же прекрасно с некоторыми пользователями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2015, 14:26 |
|
||
|
SPNEGO не авторизует пользователей с большим числом групп.
|
|||
|---|---|---|---|
|
#18+
AlexeyKh24, Не пробовали удалять группы по одной из групп пользователя? Может всё же дело в настройках одной какой-то группы, а не в количестве? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2015, 14:27 |
|
||
|
SPNEGO не авторизует пользователей с большим числом групп.
|
|||
|---|---|---|---|
|
#18+
AlexeyKh24, А какой текст ошибки в FireFox, особенно интересно в FireBug посмотреть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2015, 14:30 |
|
||
|
SPNEGO не авторизует пользователей с большим числом групп.
|
|||
|---|---|---|---|
|
#18+
Ещё, как вариант, вместо браузера взять для теста простейший Java клиент. В нём уже посмотреть детальный лог. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2015, 14:35 |
|
||
|
SPNEGO не авторизует пользователей с большим числом групп.
|
|||
|---|---|---|---|
|
#18+
AlexeyKh24, У вас один домен используется как при аутентификации, так и в сервисах? CORS не настроен? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2015, 14:42 |
|
||
|
SPNEGO не авторизует пользователей с большим числом групп.
|
|||
|---|---|---|---|
|
#18+
AlexeyKh24ivanra, да, из фото же видно, что сам браузер почему-то не отправляет хедер в случае, если пользователю прикреплено много групп (от 10). И я не знаю, как браузер получает хеш из kerberos ключа, все это инкапсулировано. В итоге на сервере поэтому и нет ошибочных логов, т.к. он попросту не видит, что ему что-то приходит. yelena, все что вы описали - инкапсулировано от моих глаз, и почти никак не зависит от моих действий. js в явном виде (именно на этой странице) нет. Код страницы - обычный сервлет, внутри которого вызывается getUserPrincipalName (метод тоже "из коробки"). Остальное все делается с помощью spnego и самого AD, ну и встроенных в Windows клиента процессов по синхронизации работы браузеров и kerberos/AD. Если рассматривать случай, когда аутентификация не проходит, то (как видно по фото) никаких особо полезных логов в Networke браузера нет, пробовал в различных браузерах. Настройка spnego: krb5.conf, login.conf, web.xml - стандартная. И как я уже упоминал, с количеством групп не более 3 - пускает. Большие хедеры к nginx/tomcat проходят, проверял вручную. Ну что значит "инкапсулировано от моих глаз"? Вы говорите, что есть какой-то "сервлет, внутри которого вызывается getUserPrincipalName". Я, извините, не понимаю, на каком этапе цепочки он принимает запрос и извлекает оттуда UserPrincipalName. Но я четко понимаю, что в браузере видны сгенерированные веб-страницы. И если запрос со страницы куда-то уходит и ответ откуда-то приходит, то можно в консоли браузера посмотреть на полученный откуда-то там ключ, когда он получен в браузере. Это 100%. Я понимаю, что этот "хороший" ключ отличается от "плохого" ключа. Если вы дебажить свое приложение не будете, то вы с места не сдвинетесь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2015, 14:42 |
|
||
|
SPNEGO не авторизует пользователей с большим числом групп.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, CORS тут пока ни при чем. У него тестовый стенд не меняется и в некоторых случаях авторизация проходит удачно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2015, 14:44 |
|
||
|
SPNEGO не авторизует пользователей с большим числом групп.
|
|||
|---|---|---|---|
|
#18+
сервлет, внутри которого вызывается getUserPrincipalName - Сама страничка JSP или какая? - Сервлет вызывается по AJAX или как? В какой момент? Нажмите F12 и отладчик вам всё покажет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2015, 14:47 |
|
||
|
SPNEGO не авторизует пользователей с большим числом групп.
|
|||
|---|---|---|---|
|
#18+
AlexeyKh24, так может, у этих пользователей сервер приложений просто не включён в список доверенных узлов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2015, 14:49 |
|
||
|
SPNEGO не авторизует пользователей с большим числом групп.
|
|||
|---|---|---|---|
|
#18+
В общем, уже понятно, что этот человек это приложение не разрабатывал, но пытается им пользоваться. Наверное, админ. Может, вернуть приложение разработчикам, указав на проблему, чтобы они его протестировали сами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2015, 14:59 |
|
||
|
SPNEGO не авторизует пользователей с большим числом групп.
|
|||
|---|---|---|---|
|
#18+
yelena, придется обращаться к разработчикам браузера )) AlexeyKh24, в firefox набрать about:config, а там искать network.negotiate-auth.trusted-uris в хроме и эксплорере просить админа добавить для пользователя сервер приложений в список доверенных узлов (ну или настроить политику для всех пользователей) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2015, 15:14 |
|
||
|
SPNEGO не авторизует пользователей с большим числом групп.
|
|||
|---|---|---|---|
|
#18+
ivanrayelena, придется обращаться к разработчикам браузера )) Может быть, а может быть и нет. Сижу читаю, как это все настраивается. Только если бы в приведенном автором тему случае это вообще не работало, то не у него бы одного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.07.2015, 15:22 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39004450&tid=2125101]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
151ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
68ms |
get tp. blocked users: |
1ms |
| others: | 206ms |
| total: | 470ms |

| 0 / 0 |
