JAAS дополнительные логин-модули - PullRequest
7 голосов
/ 07 декабря 2011

Я хотел бы знать, как объединить эти два шага аутентификации:

  1. проверить пользователя / пароль в LDAP
  2. добавить принципы (роли), найденные в БД, втема.

Репозиторий пользователей LDAP не имеет представления о ролях, специфичных для приложения, и я не хочу управлять паролями в БД приложения.Поэтому мне нужны оба.

Файл конфигурации JAAS позволяет иметь дополнительные модули LoginModules:

<name used by application to refer to this entry> { 
    <LoginModule> <flag> <LoginModule options>;
    <optional additional LoginModules, flags and options>;
};

, но я не могу найти пример, который объясняет, как я работаю.

Это так?хороший метод?

Спасибо

========================================

Вот мой ответ:

Действительно, у нас могут быть дополнительные модули входа в систему.Файл конфигурации JAAS:

Sample {
  com.sun.security.auth.module.LdapLoginModule Requisite
  userProvider="ldap://acme.org:389/OU=Users,OU=_ACME,DC=acmegis,DC=acme,DC=org"
  authIdentity="{USERNAME}"
  userFilter="(userPrincipalName={USERNAME})"
  storePass=true

  sample.module.SampleLoginModule required debug=true;
};

Здесь у нас есть два LoginModules:

LdapLoginModule Sun, который проверяет пользователя / пароль, и мой sample.module.SampleLoginModule, который запрашивает мою базу данных и заполняетдиректора школы.Важным параметром является storePass = true, который запрашивает модуль LdapLoginModule для сохранения имени пользователя и пароля в общем состоянии модуля.(см. http://docs.oracle.com/javase/6/docs/jre/api/security/jaas/spec/com/sun/security/auth/module/LdapLoginModule.html).

Так что следующие LoginModules могут получить имя пользователя, переданное методу initialize в аргументе карты sharedState. Они не должны иметь ничего общего с login (), а запрос в DB для заполнения Principales:сделано в commit () (как сказал Шими Бандиэль).

Я еще не использую его, но есть JDBoss, разработанный DatabaseServerLoginModule (см. http://community.jboss.org/wiki/DatabaseServerLoginModule), который поддерживает аутентификацию и сопоставление ролей. Используется ссоставление пароля = useFirstPass у нас должен быть ответ на мои вопросы, без записи какого-либо строкового кода (но красивый файл конфигурации JAAS).

BR

Ответы [ 2 ]

1 голос
/ 07 декабря 2011

Вы должны реализовать LoginModule, который в методе login открывает доступ к LDAP и проверяет имя пользователя / пароль, а в методе commit вы получаете доступ к БД и заполняете принципы.
Здесь нет необходимости использовать несколько LoginModule

0 голосов
/ 16 мая 2016

Это здорово! Но реализация модуля LoginModule даст вам больше возможностей для настройки взаимодействия с сервером LDAP.
Я тоже борюсь с той же проблемой, что и ты. Но помните, что при реализации LoginModule вы должны добавить роль в функцию login (), а не в commit () , иначе ваш подчиненный не получит принципала.

...