Подтвердить что ты не робот

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

Мне бы хотелось, чтобы приложение 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, вероятно, будет выбором?

4b9b3361

Ответ 1

Не поддерживается. 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, предоставляя доступ к аутентификации на уровне ОС. Perfect!.... кроме того, что он поддерживается только для Solaris и Linux, а не для Microsoft Windows.

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

Ответ 2

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

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

Ответ 3

Проект Waffle имеет как клиентский, так и серверный код для выполнения единого входа в Windows. Это основано на JNA, не требуется никаких собственных библиотек.

Ответ 5

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

Ответ 6

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

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

Ответ 7

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

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

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

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

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

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

Ответ 8

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