Получить текущего пользователя Windows в веб-приложении Java EE для целей единого входа - PullRequest
11 голосов
/ 04 января 2011

Я выполняю веб-приложение Java EE, для которого требуется единый вход в Active Directory.

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

Мне необходимо реализовать единый вход в 2 веб-приложениях Java EE.1 приложение работает на GlassFish v2.1.1 (JDK 1.6), а другое - на Tomcat (JDK 1.5).

По сути, моя основная проблема - как получить текущего пользователя Windows, вошедшего в систему.

Я уже сталкивался с JAAS и Kerberos .Пожалуйста, поправьте меня, если я ошибаюсь.Насколько я понимаю, это протокол аутентификации, и они не имеют функции для извлечения текущих окон, вошедших в систему пользователя.

Я уже пробовал следующее, но всегда получаю null или собственное имя пользователя сервера.

  1. System.getProperty("user.name");
  2. new com.sun.security.auth.module.NTSystem().getName();
  3. request.getUserPrincipal().getName();
  4. System.getenv("USERNAME");
  5. JCIF NTLM HTTP-аутентификация вTomcat
  6. LoginContext

Я открыт для любых предложений.

Ответы [ 4 ]

4 голосов
/ 29 апреля 2011

WAFFLE - отличное решение для этого.Для этого не требуется конфигурация Kerberos.

3 голосов
/ 04 января 2011

SPNEGO - это проект с открытым исходным кодом, который предоставляет фильтр сервлета, обеспечивающий встроенную аутентификацию Windows.

, если ваша организация использует веб-приложение на основе Javaсерверы, и вы предпочитаете Kerberos / SPNEGO вместо NTLM в качестве протокола аутентификации, и вы предпочитаете использовать реализацию на основе фильтра сервлетов Java (JSR-53) вместо модуля аутентификации конкретного контейнера (JSR-196), и вам нужен SSO (нет имени пользователя / пароля), тогда этот проект может вас заинтересовать.

В нем есть инструкции по настройке Tomcat и Glassfish .

0 голосов
/ 04 января 2011

JCIFS NTLM больше не поддерживается (хотя он будет работать с NTLMv1).В моем текущем проекте мы использовали SPNEGO , как было рекомендовано ранее.

Варианты 1, 2 и 3 попытаются заставить вас использовать сервер - вы можете подумать, где этот кодработает и как он может взаимодействовать с клиентским компьютером (подсказка - не может)

0 голосов
/ 04 января 2011
...