Я хотел бы знать, как объединить эти два шага аутентификации:
Репозиторий пользователей LDAP не имеет представления о ролях для конкретных приложений, и я не хочу управлять паролями в базе данных приложения. Так что мне нужно и то, и другое.
Файл конфигурации JAAS позволяет иметь дополнительные модули LoginModules:
{
;
;
};
, но я не могу найти пример, объясняющий, как я работаю.
Это хороший метод?
Спасибо
================================== =======
Вот мой ответ:
Действительно, у нас могут быть дополнительные модули LoginModules. Файл конфигурации 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 могут получить имя пользователя, переданное методу инициализации в аргументе sharedState Map. Им не должно быть никакого дела в login (), а запрос в БД для заполнения Principales выполняется в commit () (как сказал Шими Бандьель).
Я еще не использую его, но есть DatabaseServerLoginModule, разработанный JBoss (см. http://community.jboss.org/wiki/DatabaseServerLoginModule ), который поддерживает аутентификацию и отображение ролей. При использовании с password-stacking = useFirstPass мы должны получить ответ на мою потребность без написания какого-либо строчного кода (но красивый файл конфигурации JAAS).
Б.