2014-02-13 2 views
0

Я написал программу, которая считывает веб-сервиса, извлечения пользовательских данных, а затем должен нажать эти данные в ActiveDirectory, тем самым обновляя название пользователя, адрес, номера телефонов и т.д.Unboundid не возвращает запрошенные атрибуты LDAP. Зачем?

Проблема заключается в том, что, когда я выполните поиск, используя класс Unboundid Connection, запрошенные атрибуты не возвращаются. Ниже приведен код поиска:

SearchResult result = connection.search(properties.getProperty("ldap.search.baseDN"), 
         SearchScope.SUB, "(cn=" + userId + ")", 
         "personalTitle", "department", "company", "manager", "telephoneNumber", 
         "streetAddress", "I", "st", "postalCode", "c", "pager", "mobile", 
         "fax", "cn"); 

Вышеприведенный код находит нужного пользователя и атрибут сп возвращается, как и ожидалось, но другие атрибуты все не возвращаются. Если я подключаюсь к AD, используя JXplorer, используя те же учетные данные подключения, я могу видеть, что все необходимые атрибуты существуют, но просто не возвращаются.

enter image description here

Я попытался подставляя SearchRequest.ALL_OPERATIONAL_ATTRIBUTES, SearchRequest.ALL_USER_ATTRIBUTES и SearchRequest.REQUEST_ATTRS_DEFAULT, а не перечисление полей в явном виде, но без успеха.

Я также посмотрел на объект 'Schema' вернулся с 'connection.getSchema()' и можно увидеть, что personalTitle должны существовать:

connection.getSchema().getAttributeType("personalTitle") 

Приведенный выше код возвращает:

1.2.840.113556 .1.2.615 ИМЯ 'personalTitle' SYNTAX '1.3.6.1.4.1.1466.115.121.1.15' ОДИНОЧНОЕ ЗНАЧЕНИЕ

Возможно, это проблема с правами пользователя? Кто-нибудь испытал это и знает, как его решить?

Спасибо, Майк

ответ

1

запись результатов поиска LDAP включает только атрибуты, которые на самом деле имеют значение, так что поведение, которое вы видите из UnboundID LDAP SDK уместно и правильно. Даже если вы явно запрашиваете определенный атрибут, этот атрибут будет включен только в запись, если он имеет одно или несколько значений.

Я думаю, что вы смущены JXplorer, потому что он читает схему, чтобы определить, какие атрибуты могут быть включены в запись на основе ее классов объектов и покажет их вам, чтобы вы могли устанавливать значения для этих атрибутов в редактор. Но это не означает, что запись, возвращаемая сервером, фактически включает в себя любую информацию об этих атрибутах.

Чтобы проверить это, вы можете использовать инструмент ldap-debugger, поставляемый с SDK LDAP, чтобы увидеть фактическую связь LDAP. Просто запустите команду вроде:

tools/ldap-debugger --hostname {directory-server-address} \ 
     --port {directory-server-port} --listenPort {listen-port} 

это создаст очень простой прокси-сервер LDAP, который декодирует все запросы и ответы, которые проходят через него. Чтобы использовать его, просто укажите JXplorer в указанном порту прослушивания. Вы увидите, что, когда JXplorer получает запись, запись, возвращаемая сервером, будет содержать только атрибуты, на самом деле имеющие значения.

Если вы хотите выяснить, какие все возможные атрибуты вы можете включить в данную запись, используйте метод LDAPConnection.getSchema для извлечения схемы сервера, а затем Schema.getObjectClass для каждого из классов объектов в целевой элемент и, наконец, использовать методы ObjectClassDefinition.getRequiredAttributes и ObjectClassDefinition.getOptionalAttributes, чтобы увидеть, какие типы атрибутов должны и могут использоваться в записях с этим классом объектов.

+0

Вы, сэр, очень осведомлены в этой области! Благодаря тонну. Я попробовал connection.getSchema() и проверил, что поля, которые я хочу заполнить, доступны. В настоящее время они просто не имеют никаких значений. –

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