Как использовать Windows login для единого входа и для записей Active Directory для настольного приложения Java?

Я хотел бы, чтобы мое настольное приложение Java имело единый вход, связанный с пользователь Active Directory. В два шага, я хотел бы:

  1. убедитесь, что конкретный пользователь вошел в Windows с некоторой записью пользователя.
  2. проверьте некоторые сведения о настройке для этого пользователя из Active Directory

С Java: программный способ определения текущего пользователя Windows Я могу получить имя текущего пользователя Windows, но может Я полагаюсь на это? Я думаю, что

System.getProperty("user.name")

не будет достаточно безопасной? ("пользователь.имя " кажется, получено из переменных среды, поэтому я не могу полагаться на это, я думаю?)

вопрос аутентификация против Active Directory с Java на Linux предоставляет мне аутентификацию для данного имени + pass, но я хотел бы аутентифицироваться на основе входа в систему Windows?

для доступа к Active Directory LDAP, вероятно, будет выбором?

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

8 ответов


Он не поддерживается. Java 6 имеет улучшения, но еще недостаточно.

Java имеет свой собственный стек GSS. Проблема заключается в том, что для единого входа вам нужно получить билет Kerberos из ОС (а не из стека Java). В противном случае пользователь должен аутентифицировать второй раз (победив цель единого входа).

посмотрите на http://java.sun.com/developer/technicalArticles/J2SE/security/. Посмотрите вниз на "Access Native GSS-API", и он говорит о новой системе собственность sun.безопасность.с jgss.родной, который при установке true заставляет Java использовать базовую реализацию OS GSS, предоставляя доступ к аутентификации уровня ОС. Прекрасно!.... кроме его поддерживается только для Solaris и Linux, а не Microsoft Windows.

Ява 6 похоже, нет достаточной поддержки как сервер получение запросов проверки подлинности SPNEGO от IE, а затем аутентификация этого пользователя в Active Directory. Его просто поддержка настольных клиентов это еще не все.

использовать систему jaas С LDAP LoginModule. Это позволит вам подключаться к базовой инфраструктуре безопасности Java.

когда вам нужно отключить приложение или "отладить" приложение, вы можете легко поменять модуль LDAP на фиктивный модуль. Это позволяет продолжить тестирование вашей "безопасности" без зависимости от Active Directory. Сильно тестируемый, развязанный, и вы можете схема аутентификации в более позднее время почти без горя.


проект вафельницы имеет как клиентский, так и серверный код для SSO в Windows. Это JNA-based, никаких собственных библиотек не требуется.


этой статья от Sun, а это библиотека с открытым исходным кодом возможно, вы сможете получить то, что вам нужно.


просто для пользы других, читающих эту тему,http://www.javaactivedirectory.com/?page_id=196 есть пример того, как сделать единый вход в Windows/Active Directory


Проверьте jCifs на http://jcifs.samba.org/

кроме этого, придерживайтесь LDAP (на самом деле, это должна быть моя первая попытка, но...)


вы рассматривали использование api JNA (позволяет легко выполнять собственные вызовы операционной системы)?

вы можете вызвать win32 metod GetCurrentUser документация MSDN на http://msdn.microsoft.com/en-us/library/ms724432 (VS.85).aspx. Он расположен внутри Advapi32.файл DLL.

Он также имеет версию unicode, GetCurrentUserW при необходимости.

и вы правы. Кажется, что переменная среды может быть изменена, так что это может ввести в заблуждение использовать.

Я не уверен в кросс-платформенных последствиях для 32 / 64bit windows. Если вам нужно решение в коде, я уверен, что могу написать что-то для него.

Но да, просто идея :)


вы, вероятно, получите максимальную гибкость, используя Весна Безопасности. Вы можете использовать его с аутентификацией JAAS и LDAP.