Назад | Перейти на главную страницу

Как работает система единого входа с Active Directory, при которой пользователи прозрачно входят в веб-приложение интрасети?

Мне сказали, что можно создать веб-приложение, не требующее входа в систему. Пользователь входит в систему Windows, которая проходит проверку подлинности с помощью поиска в Active Directory (LDAP). Затем они смогут зайти в мое веб-приложение и никогда не увидеть приглашение для входа в систему. Эти клиенты называют это системой единого входа (возможно, неправильно и отчасти из-за меня).

Но из того, что я прочитал Single Sign On из документации Tomcat, следующее:

Клапан единого входа используется, когда вы хотите дать пользователям возможность входить в систему. любое из веб-приложений, связанных с вашим виртуальным хостом, а затем их личность будет распознана всеми другими веб-приложениями на том же виртуальном хосте.

Мне это совершенно ясно. Пользователь должен войти в систему один раз и может получить доступ к каждому веб-приложению на экземпляре tomcat. Но что мне нужно сделать, так это позволить им войти в систему, даже не предоставляя никаких учетных данных для моего сервера tomcat.

Итак, чтобы это сработало, я представляю:

Я видел несколько примеров, в которых используются сертификаты на стороне клиента ... в частности, система DoD PKI, которая имеет для меня некоторый смысл, потому что в этих случаях вы настроить Tomcat для запроса сертификатов на стороне клиента, но просто войдя в Windows, я не понимаю, как это будет работать и какую информацию браузер будет передавать на сервер и т. д. Это то, для чего используется NTLM?

Прежде всего - и в случае, если другие пользователи посещают эту страницу - существуют только определенные методы аутентификации, которые позволяют выполнять единый вход без задержки. Эти NTLM и Kerberos. С другой стороны, LDAP никогда не даст вам мгновенного единого входа.

NTLM - это фактически NTLMv1 и NTLMv2. Они очень разные, и NTLMv1 устарел из-за серьезных проблем с безопасностью. Вам следует избегать решений аутентификации Java, которые не могут правильно определить, поддерживают ли они NTLMv1 или NTLMv2, потому что они используют в своей документации только слово «NTLM». Скорее всего, разработчики указанного решения безопасности сами не знают, что является еще одной причиной для поиска пожарной лестницы.

Вопреки традиционному мнению, NTLMv1 и NTLMv2 полностью задокументированы Microsoft, но вы все равно найдете решения, которые утверждают, что протокол «реконструирован». Это правда, что это было необходимо до того, как Microsoft задокументировала протоколы, как я полагаю, примерно в 2006 или 2007 году. В любом случае NTLMv1 - нет. В самой NTLMv2 нет ничего плохого, но Microsoft постепенно отказывается от NTLM (в любой форме) во всех своих продуктах в пользу аутентификации Kerberos. NTLMv1 давно мертв, а NTLMv2 теперь используется Microsoft только в тех случаях, когда нет доступного контроллера домена. Итог: NTLM (в любой форме) - это не путь вперед. На самом деле мы должны поблагодарить Microsoft за применение здесь подхода, основанного на стандартах.

Это оставляет вам Kerberos. Microsoft создала протокол для согласования и передачи информации аутентификации через HTTP. Это известно в продуктах Microsoft как "Встроенная проверка подлинности Windows"но он стал официальным стандартом под названием СПНЕГО. Это то, что вам следует искать. SPNEGO поддерживает как NTLMv2, так и Kerberos в качестве основного механизма проверки подлинности, но по указанным выше причинам вы должны ориентироваться на Kerberos, а не на NTLMv2.

Я успешно интегрировал несколько приложений Tomcat (работающих в Linux / Solaris) с Active Directory, используя Проект SPNEGO на SourceForge. Я обнаружил, что это самый простой подход. Это дает вам мгновенный единый вход, аналогичный тому, что, например, делает сервер Sharepoint. Это, скорее всего, то, что ваши пользователи будут ожидать, когда будут говорить о «едином входе». Правильная конфигурация Kerberos, генерация ключей и настройка «фиктивных» учетных записей в Active Directory могут быть проблемой, но как только вы все сделаете правильно, все будет работать как шарм.

Единственное, что мне не нравится в Проект SPNEGO на SourceForge в том, что я не понимаю, как часто он выполняет аутентификацию. У меня неприятное подозрение, что он делает это для каждого просмотра страницы, а не один раз для каждого сеанса. Возможно, я ошибаюсь в этом. В любом случае: это подчеркивает еще одну вещь, которую следует учитывать в решениях SSO: вы не хотите внедрять решение, которое «засыпает» вашего поставщика удостоверений (например, Active Directory) ненужными запросами.

В среде Windows Active Directory единый вход используется для обозначения посещения внутренней веб-страницы с вашими разрешениями входа в Windows, и веб-сервер может действовать в соответствии с ними. Это то, для чего используется NTLM, но в более новых реализациях вместо этого используется Kerberos.

Если вы открываете веб-сайт Sharepoint Server, он знает, кто вы, не нуждаясь в имени пользователя и пароле для входа, но это работает только для внутренних веб-сайтов в той же сети, я не думаю, что для него имеет смысл работать на общедоступном веб-сайте. (Я не могу сказать, имеете ли вы в виду «виртуальный хост», как в виртуальном хосте Apache, или как в размещенном на стороне сервере).

Вот документ Microsoft, описывающий, как проверка подлинности Kerberos работает на веб-сервере под управлением IIS / ASP.Net: http://msdn.microsoft.com/en-us/library/ff647076.aspx

Похоже, это можно сделать с Apache / Tomcat / Java. Вот PDF-файл с описанием реализации этого в британском университете: http://gfivo.ncl.ac.uk/documents/UsingKerberosticketsfortrueSingleSignOn.pdf и проект Codeplex для него: http://tomcatspnego.codeplex.com/ и Openfire содержат документацию по работе с Java / Kerberos здесь (http://community.igniterealtime.org/docs/DOC-1060 ).

Похоже, вы описываете то, что Microsoft называет встроенной аутентификацией Windows.

Похоже, Tomcat поддерживает проверку подлинности Windows на основе Эта статья.

Для начала, вы не можете избежать входа в систему. Если вы хотите идентифицировать пользователей, вы должны сделать так, чтобы они вошли в систему. Забудьте о NTLM, на помощь приходит Kerberos - он может делать все совершенно прозрачно.

SingleSignOnValve - это не то, что вы ищете. Если вы используете Tomcat 7, вы можете использовать SpnegoAuthenticator сразу, но на 6 нужно использовать этот.