2011-02-08 2 views
3

Я пытаюсь создать JAVA-программу, которая получит мои учетные данные пользователей Windows, затем подключится к кеберосам в моем unix-блоке и проверит подлинность и разрешит использовать сервис, например, сервер LDAP.Kerberos SSO, реализованный с помощью Java

Все примеры, которые я нашел, имеют тенденцию к запуску, спросите меня о моем пароле, я не хочу этого - я хочу иметь возможность запускать программу и «если по манере» im kerberos аутентифицироваться.

Любые ссылки и пример оценены.

+0

+1 И если это будет работать для Linux, я был бы еще счастливее! – Daniel

ответ

5

Мы успешно настроили SSO с использованием Kerberos с приложением Java EE и аутентифицировали Windows Active Directory после многих недель испытаний и сканирования в Интернете.

JBOSS Negotiation и Spring Kerberos работают для нас. Однако оба набора документации недостаточно точны, чтобы заставить вас сбежать с земли. Поставьте простой для любого решения ...

  1. Создать пользователя службы в Active Directory.
  2. Используйте ktpass для создания файла keytab для этого пользователя. (Множество gotchas с ktpass, как указано ниже)
  3. Используйте setspn -A для исправления ktpass.
  4. Убедитесь, что ваши krb5.conf (linux) или krb5.ini (windows) верны.
  5. Убедитесь, что вы не используете клиента в том же поле, что и сервер.
  6. Убедитесь, что ваше время синхронизируется с вашим доменом.
  7. Проверка Kerberos с использованием kinit в JDK.
  8. Настройте свое веб-приложение для делегирования аутентификации через предоставленный фильтр.
  9. Настройте XML-файл для использования соответствующего пользователя-пользователя службы, созданного изначально.
  10. Запустите службу в качестве основного пользователя !!!!!!!!!
  11. Если вы используете Spring, вы можете реализовать UserDetailsService для запроса LDAP (активного каталога) и установки ролей в пользователе.
  12. С вашего приложения пользователь должен! = Null.

проблемы Ktpass:

  1. Убедитесь, что ваш пользователь службы установлен пользователь не может изменить пароль в Active Directory.
  2. Убедитесь, что вы предоставили пароль в командной строке.
  3. Убедитесь, что вы все еще можете открыть командную строку в качестве этого пользователя после генерации keytab.
  4. Убедитесь, что вы указали KRB5_NT_PRINCIPAL.
  5. Формат должен быть ktpass /out c:\service.keytab /mapuser [email protected] /princ HTTP/[email protected] /pass /ptype KRB5_NT_PRINCIPAL
  6. Добавьте полный принципал службы с использованием SETSPN -A следующим образом: setspn –A HTTP/hostname.testdomain.server.com userservice
  7. НЕ ВОССТАНОВЛЕНИЕ УСЛУГИ ГЛАВНЫХ ПОЛЬЗОВАТЕЛЯМИ ПАРОЛЯ (Вам придется восстанавливать свой Keytab).

И, наконец, перед каждым испытанием используйте очиститель кини, чтобы очистить кеш-билеты.

Кроме того, дублирующиеся SPN's сломают вещи плохо! setspn -X в Windows Server 2008 обнаружит это (или google для скрипта), если это вызывает сомнения, заново начинайте с нового пользователя службы и имени пользователя!

Надеюсь, это поможет кому-то избежать боли, которую я испытывал.

Смежные вопросы