Как я могу применить LDAP bindRequest в Java с использованием JNDI? - PullRequest
1 голос
/ 08 сентября 2011

У меня есть JNDI-соединение с сервером LDAP (в данном случае Active Directory). Я также ctx.extendedOperation( new StartTlsRequest() ), чтобы получить безопасное соединение.

В связи с этим мне нужно проверить учетные данные. Я МОГУ войти, используя

ctx.addToEnvironment( Context.SECURITY_AUTHENTICATION, "simple" );
ctx.addToEnvironment( Context.SECURITY_PRINCIPAL, principal );
ctx.addToEnvironment( Context.SECURITY_CREDENTIALS, credentials );

Однако команда "bindRequest" выдается только через ldap при следующем действии, выполненном в контексте JNDI. И все же я ничего не хочу с этим делать. Мне просто нужно проверить полномочия. Есть ли способ применить «bindRequest»?

Иначе, какое действие я должен использовать в качестве своего собственного NOP? Поиск несуществующего объекта или я должен запросить какой-либо атрибут какого-либо существующего объекта или ...? Он должен быть быстрым, он не должен создавать никакой работы на стороне сервера и должен использовать как можно меньшую полосу пропускания. (Потому что на самом деле это действие никогда не должно быть необходимым в первую очередь ...)

С уважением, Штеффен

Ответы [ 3 ]

1 голос
/ 09 сентября 2011

LdapContext.reconnect () выполняет привязку LDAP.

0 голосов
/ 08 сентября 2011

Для вашего действия NO-OP вы можете просто найти root DSE . Это должно быть в памяти на сервере. Если у вас есть доступ к запросу и ответу BIND, вы можете включить элемент управления запросом идентификации авторизации в запрос BIND. Если сервер поддерживает этот элемент управления запросом (в этом случае он будет указан в корневом DSE), сервер включит элемент управления ответом идентификации авторизации в ответ BIND. Этот элемент управления ответом будет идентификатором аутентификации соединения.

0 голосов
/ 08 сентября 2011

Насколько я понимаю, решение состоит в том, чтобы просто искать принципала в каталоге, выполняя поиск с помощью фильтра, например:

(&(objectCategory=person)(sAMAccountName=principal))

Если принципал имеет вид: "user1"

(&(objectCategory=person)(userPrincipalName=principal))

Если участник находится в форме: "user1@dom.fr"

...