Как использовать вход в Windows для единого входа и записей Active Directory для приложения Java для настольных компьютеров? - PullRequest
30 голосов
/ 13 февраля 2009

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

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

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

System.getProperty("user.name")

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

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

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

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

Ответы [ 8 ]

13 голосов
/ 06 октября 2009

Не поддерживается. В Java 6 есть улучшения, но этого пока недостаточно.

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

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

Однако

Java 6, по-видимому, имеет достаточную поддержку для работы в качестве сервера , получающего запросы аутентификации SPNEGO от IE, а затем аутентифицирующего этого пользователя в Active Directory. Это просто поддержка клиента настольного компьютера, которая все еще не завершена.

5 голосов
/ 13 февраля 2009

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

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

4 голосов
/ 15 ноября 2010

Project Waffle содержит как клиентский, так и серверный код для единого входа в Windows Он основан на JNA, нативные библиотеки не требуются.

2 голосов
/ 15 июня 2010

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

2 голосов
/ 16 ноября 2009

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

0 голосов
/ 13 февраля 2009

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

0 голосов
/ 13 февраля 2009

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

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

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

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

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

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

0 голосов
/ 13 февраля 2009

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

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

...