Як працює SSO з Active Directory, завдяки чому користувачі прозоро входять у веб-додаток інтранет?


40

Мені кажуть, що можна зробити веб-додаток, який не потребує входу. Користувач входить у систему Windows, яка засвідчує автентифікацію за допомогою пошуку Active Directory (LDAP). Потім вони повинні мати можливість перейти до мого веб-сайту і ніколи не бачити підказки для входу. Ці клієнти посилаються на це як єдиний вхід (можливо, неправильно і є частиною моєї плутанини).

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

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

Це мені цілком зрозуміло. Користувач повинен один раз увійти та отримати доступ до кожного веб-сайту в екземплярі tomcat. Але що мені потрібно зробити, це якимось чином дозволити їм увійти, не надаючи ніколи ніяких даних для мого сервера tomcat.

Отже, для того, щоб це працювало, я уявляю:

  • Користувач робить запит на деяку сторінку
  • Сервер не бачить маркер сеансу, а потім запитує клієнта для отримання деяких облікових даних.
  • Клієнтський браузер без будь-якого втручання з боку користувача надає серверу деякі облікові дані.
  • Потім, використовуючи ті облікові дані, надані браузером клієнтів, він здійснює пошук у LDAP.

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

Відповіді:


40

Перш за все, - а якщо інші користувачі відвідують цю сторінку - існують лише певні методи аутентифікації, які дозволяють вам робити оперативну SSO. Це NTLM та Kerberos . З іншого боку, LDAP ніколи не надасть вам оперативної SSO.

NTLM - це фактично NTLMv1 і NTLMv2. Вони дуже різні, і NTLMv1 застарілий через серйозні проблеми із безпекою. Вам слід ухилятися від рішень автентифікації Java, які не можуть правильно визначити, чи підтримують вони NTLMv1 або NTLMv2, оскільки вони використовують лише слово "NTLM" у своїй документації. Цілком ймовірно, що розробник зазначеного рішення безпеки не знає себе, що є тим більше причин шукати пожежу.

Всупереч традиційній думці, як NTLMv1, так і NTLMv2 повністю задокументовані Microsoft, але ви все одно знайдете рішення, які стверджують, що протокол був "зворотно розроблений". Це правда, що це було потрібно до документування Microsoft протоколами, на які я вважаю, приблизно в 2006 або 2007 роках. Так чи інакше, NTLMv1 - це ні-ні. З NTLMv2 не має нічого поганого, але Microsoft припиняє NTLM (у будь-якій формі) у всіх своїх продуктах на користь автентифікації Kerberos. NTLMv1 давно помер, а NTLMv2 тепер використовується лише Microsoft у випадках, коли контролер домену не доступний. Підсумок: NTLM (у будь-якій формі) насправді не такий шлях вперед. Справді, ми повинні привітати компанію Microsoft за прийняття стандартного підходу.

Це залишає вас з Керберосом. Microsoft створила протокол для узгодження та транспортування інформації про автентифікацію через HTTP. У продуктах Microsoft це відомо як " Інтегрована автентифікація Windows ", але вона була зафіксована як офіційний стандарт під назвою SPNEGO . Це те, що вам слід шукати. SPNEGO підтримує як NTLMv2, так і Kerberos як основний механізм аутентифікації, але з вищезазначених причин слід орієнтуватися на Kerberos, а не на NTLMv2.

Я успішно інтегрував декілька додатків Tomcat (працює на Linux / Solaris) з Active Directory за допомогою проекту SPNEGO в SourceForge . Я вважав, що це найпростіший підхід. Це дає вам оперативне SSO, подібне до того, як, наприклад, сервер Sharepoint. Це, швидше за все, те, що очікують ваші користувачі, розмовляючи про "SSO". Отримати правильну конфігурацію Kerberos, генерувати ключі та налаштовувати "фіктивні" акаунти в Active Directory може бути клопотом, але як тільки ви правильно це зробить, як шарм.

Єдине, що мені не подобається у проекті SPNEGO в SourceForge, це те, що я не розумію, як часто він виконує аутентифікацію. Моє бридке підозру в тому, що він робить це для кожного перегляду сторінки, а не один раз для кожного сеансу. Можливо, я в цьому помиляюся. У будь-якому разі: це підкреслює іншу річ, яку слід враховувати в рішеннях SSO: ви не хочете реалізувати рішення, яке "спамує" вашого постачальника ідентифікаторів (скажімо, Active Directory) із зайвими запитами.


2
Дякую, зробила це прийнятою відповіддю. Одне, що потрібно додати до вашого списку оперативних входів, - це реєстрація сертифікатів x509 ... Як і урядові картки CAC.
blak3r

Це фантастична відповідь, навіть якщо їй 6 років! Я б підняв x10, якби міг!
Тім С.

2

У середовищі Windows Active Directory використовується один вхід, який означає, що відвідування внутрішньої веб-сторінки містить ваші дозволи для входу в Windows, і веб-сервер може діяти на них. Це те, для чого використовується NTLM, але нові версії замість цього використовують Kerberos.

Якщо ви відкриєте веб-сайт Sharepoint Server, він знає, хто ви є, не потребуючи імені користувача та пароля для входу, але це працює лише для внутрішніх веб-сайтів у тій самій мережі, я не думаю, що це має особливий сенс для роботи на загальнодоступному веб-сайті. (Я не можу сказати, якщо ви маєте на увазі "віртуальний хост", як в vhost 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 ).


0

Це звучить так, ніби ви описуєте те, що Microsoft називає інтегрованою автентифікацією Windows.

Схоже, Tomcat підтримує автентифікацію Windows на основі цієї статті .


-1

Для початку ви не можете уникнути входу. Якщо ви хочете ідентифікувати користувачів, ви повинні мати їх для входу. Забудьте про NTLM, на допомогу приходить Керберос - він може зробити все абсолютно прозорим чином.

SingleSignOnValve - це не те, що ви шукаєте. Якщо ви використовуєте Tomcat 7, ви можете скористатися SpnegoAuthenticator відразу, але на 6 ви повинні використовувати це .


Трохи плутаються ... Перше і друге речення, здається, суперечать. З Kerberos користувачеві не запропоновано ввійти?
blak3r

1
Ні, вони цього не роблять. Дивіться на великій картині, завдяки Керберосу користувач вводить свої облікові дані один раз вручну, після чого кожне вхід відбувається автоматично від його імені. Це не означає, що тоді жодного входу не відбувається. Це те, що ви написали.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.