Мы используем Apache Shiro для аутентификации и авторизации пользователей с использованием нашего активного каталога.Как я могу искать поля ldap при использовании ActiveDirectoryRealm в Apache Shiro?
аутентифицировать пользователя и картографической группы прекрасно работает с помощью следующей конфигурации:
adRealm = org.apache.shiro.realm.activedirectory.ActiveDirectoryRealm
adRealm.searchBase = "OU=MYORGANIZATION,DC=MYDOMAIN,DC=COM"
adRealm.groupRolesMap = "CN=SOMEREADGROUP":"read","CN=SOMEMODIFYGROUP":"modify","CN=SOMEADMINGROUP":"admin"
adRealm.url = ldaps://my.ad.url:636
adRealm.systemUsername= systemuser
adRealm.systemPassword= secret
adRealm.principalSuffix= @myorganization.mydomain.com
можно аутентифицировать в Сиро, используя следующие строки:
String user = "someuser";
String password = "somepassword";
Subject currentUser = SecurityUtils.getSubject();
if (!currentUser.isAuthenticated()){
UsernamePasswordToken token = new UsernamePasswordToken (user,
password);
token.setRememberMe (true);
currentUser.login (token);
}
теперь мы хотим, чтобы получить больше информации о пользователе из нашего ActiveDirectory. Как я могу это сделать с помощью Apache Shiro? Я не смог ничего найти в документации.
В исходном коде ActiveDirectoryRealm я нашел эту строку:
NamingEnumeration answer = ldapContext.search(searchBase, searchFilter, searchArguments, searchCtls);
Так первая часть ответа ясна: использовать ldapContext искать что-то в нем. Но как я могу получить LdapContext?
хорошо, это может помочь. Но даже если я расширяю ActiveDirectoryRealm: как я могу получить экземпляр, созданный при чтении с shiro.ini? Одним из возможных решений было бы создание нового класса, расширяющего ActiveDirectoryRealm как Singleton. У вас есть другая идея? И да: я хочу повторно использовать существующий контекст для запроса i. е. имя и адрес электронной почты пользователя. –
Большое спасибо! Расширение AD Realm сделало трюк.Я думал, что должна быть возможность получить экземпляры, созданные при разборе файла ini, но я не мог найти возможности. Теперь я решил это с использованием одноэлементного подхода: когда вызывается конструктор моего ADRealm, я сохраняю экземпляр в статическом поле. Класс теперь использует существующий контекст ldap, чтобы получить дополнительную информацию от AD. –