|
Spec-Zone .ru
спецификации, руководства, описания, API
|
Не все функции, описанные в этом документе, должны поддерживаться поставщиком услуг LDAP. Однако, если функция поддерживается, она должна поддерживаться в пути, описанном этим документом.
Есть четыре типа свойств среды, которые влияют на поставщиков услуг LDAP:
В частности если какое-либо из следующих свойств не предоставляется в свойствах среды тогда, это разыскивается от системных свойств, параметров апплета, и и провайдер и файлы ресурсов приложения (в том порядке):
Свойства среды контекста могут быть исследованы, используя метод Context.getEnvironment.
Когда свойство удаляется из свойств среды контекста, контекст принимает поведение значения по умолчанию, определенное для того свойства. Это не обязательно означает, что значение по умолчанию должно быть записано как значение свойства. Удаление может также быть обозначено отсутствием свойства от свойств среды контекста.
Значение этого свойства является строкой десятичных цифр, которая определяет пакетный размер результатов поиска, возвращенных сервером.
Это свойство влияет на поведение блокирования Context.list, Context.listBindings, и методы DirContext.search и NamingEnumeration возражают, что возвращаются. Это не влияет, сколько элементов возвращается в перечислении; это только влияет, как элементы обрабатываются в пакетном режиме или читаются на уровне протокола LDAP.
Установка нулевых средств, которые должен блокировать провайдер, пока все результаты не были получены. Установка целого числа n больше чем нулевые средства, что провайдер должен блокировать до n результаты, была получена от сервера или пока перечисление завершается, какой бы ни производит меньше числа результатов. После того, как приложение считало результаты n (использующий NamingEnumeration.next или NamingEnumeration.nextElement), провайдер должен считать n больше следствий сервера или пока перечисление завершается, какой бы ни производит меньше числа результатов.
Если это свойство не устанавливается тогда, его значение по умолчанию специфично для реализации.
Например, следующий код определяет, что провайдер должен блокировать, пока 24 записи не были считаны из сервера или пока перечисление завершается, какой бы ни производит меньше числа результатов:
env.put(Context.BATCHSIZE, "24");
Значение этого свойства является разделенным от двоеточия списком полностью определенных имен class классов фабрики управления.
Фабрики ответственны за сужение class средств управления ответом. Они создают определенные средства управления ответом из универсальных средств управления ответом, сгенерированных провайдером.
Никакое значение по умолчанию не определяется для этого свойства.
Например, следующие кодовые наборы ResponseControlFactory class как фабрика управления, чтобы попробовать:
env.put(LdapContext.CONTROL_FACTORIES, "com.sun.jndi.ldap.ctl.ResponseControlFactory");
Значение этого свойства является полностью определенным именем class фабрики class, который создает начальный контекст для поставщика услуг LDAP.
Это используется, чтобы выбрать определенного поставщика услуг LDAP; это фактически не используется провайдером непосредственно. Это свойство не должно быть установлено, когда параметром имени начальным методам контекста является URL.
Никакое значение по умолчанию не определяется для этого свойства.
Например, следующий код выбирает провайдера Sun LDAP:
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
Значение этого свойства является разделенным от двоеточия списком полностью определенных имен class объектных классов фабрики.
Фабрики ответственны за создание конкретных целей из записей LDAP, возвращенных провайдером. Например, фабрика объекта Человека могла бы генерировать объект Person от записи LDAP объектного человека class. Объектные фабрики ведут себя противоположным способом утвердить фабрики, на которых они генерируют объекты от атрибутов LDAP.
Никакое значение по умолчанию не определяется для этого свойства.
Например,
env.put(Context.OBJECT_FACTORIES, "com.sun.jndi.ldap.obj.PersonFromLDAP");устанавливает PersonFromLDAP class как объектная фабрика, чтобы попробовать.
Значение этого свойства является разделенным от двоеточия списком полностью определенных имен class классов фабрики состояния.
Фабрики ответственны за создание состояния объекта (для того, чтобы сохранить) от объекта непосредственно. Например, фабрика состояния Человека могла бы генерировать запись LDAP объектного человека class от объекта Person. Государственные фабрики ведут себя противоположным способом возразить фабрикам в этом, они генерируют атрибуты LDAP от объектов.
Никакое значение по умолчанию не определяется для этого свойства.
Например,
env.put(Context.STATE_FACTORIES, "com.sun.jndi.ldap.obj.PersonToLDAP");
устанавливает PersonToLDAP class как фабрика состояния, чтобы попробовать.
Значение этого свойства является строковым тегом языка согласно .
env.put(Context.LANGUAGE, "ja-JP");
Значение этого свойства является списком разделенного пробелом LDAP или строк URL LDAPS, каждая из которых определяет имя узла и номер порта сервера LDAP, и корневое отличительное имя контекста именования, чтобы использовать. URL LDAP определяет использование плоскости (то есть, незащищенный) соединение; URL LDAPS определяет использование соединения SSL. Если список содержит больше чем один URL, провайдер должен попытаться использовать каждый URL поочередно, пока это не в состоянии создать успешное соединение, и после создания, установить свойство в успешный URL.
Именем узла значения по умолчанию является localhost; портом значения по умолчанию является 389 для простых соединений и 636 для соединений SSL. Корневое отличительное имя значения по умолчанию является пустой строкой. Если это свойство не устанавливается, или если или имя узла или номер порта опускаются, то значения по умолчанию используются вместо недостающей информации. Если и имя узла и порт отсутствуют, но непустое отличительное имя присутствует в URL, то провайдер должен использовать отличительное имя, чтобы определить имя узла и порт сервера (ов) LDAP как описано в разделе URL и когда соединение было установлено успешно, установил свойство java.naming.provider.url в URL, созданный, используя успешное имя узла, порт и отличительное имя. См. также раздел URL для информации о том, как провайдер должен обработать другую информацию, найденную в URL.
Например:
env.put(Context.PROVIDER_URL, "ldap://secserver:636");определяет, что сервер LDAP работает на узле под названием secserver в порту 636.
ОТМЕТЬТЕ: Изменение этого свойства, используя методы Context.addToEnvironment ИЛИ Context.removeFromEnvironment не влияет на контекст. Это только используется начальными конструкторами контекста.
Значение этого свойства является строкой, которая определяет, как отсылки должны быть обработаны провайдером. Следующие значения определяются для этого свойства:
См. раздел URL для информации о том, как обработать многократные URL, найденные в единственной записи отсылки.
Если это свойство не устанавливается тогда, его значением по умолчанию является ignore.
Например:
env.put(Context.REFERRAL, "throw");
Значение этого свойства является строкой, которая определяет механизм (ы) аутентификации для провайдера, чтобы использовать. Следующие значения определяются для этого свойства:
См. раздел SASL для информации о том, как это свойство используется для аутентификации SASL. См. для информации о механизмах аутентификации LDAP.
Если это свойство не устанавливается тогда, его значением по умолчанию является none, если java.naming.security.credentials свойство не устанавливается, когда значением по умолчанию является simple. Если это свойство устанавливается в значение, которое провайдер не распознает или поддерживает, это должно бросить AuthenticationNotSupportedException.
Например:
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_AUTHENTICATION, "DIGEST-MD5 CRAM-MD5");
env.put(Context.SECURITY_CREDENTIALS, "secret");
Значение этого свойства является строкой, которая определяет идентификационные данные принципала, который будет аутентифицироваться. Его формат зависит от типа аутентификации; см. для получения дополнительной информации. Значение используется в качестве компонента name в LDAP ASN.1 BindRequest для non-SASL аутентификации. Для аутентификации SASL значение этого свойства используется в качестве ID аутентификации для механизмов SASL, которые нуждаются в ID аутентификации.
Провайдер не обязан проверять законность основного имени. Это может, например, только передать строку, которая будет проверена сервером. Если идентифицированный принципал не будет допустимым принципалом тогда, то провайдер должен бросить AuthenticationException.
Никакое значение по умолчанию не определяется для этого свойства.
Например:
env.put(Context.SECURITY_PRINCIPAL, "cn=admin,o=sun,c=us");
определяет основное имя, чтобы быть отличительным именем "cn=admin, o=sun, c=us".
Если это свойство устанавливается в ssl, провайдер должен использовать сокеты SSL, или бросить ConfigurationException, если это неспособно сделать так. В дополнение к упомянутому выше значению провайдер может поддерживать другие протоколы системы защиты. Однако, такие специфичные для провайдера протоколы не могли бы поддерживаться всеми провайдерами. Если это свойство устанавливается в протокол системы защиты, который провайдер не распознает или поддерживает, это должно бросить ConfigurationException.
Если java.naming.ldap.factory.socket свойство устанавливается, то фабрика сокета, идентифицированная тем свойством, должна создать сокеты, которые являются подходящими для этой установки протокола. Например, если протокол системы защиты устанавливается в ssl, то фабрика сокета должна создать совместимые SSL сокеты.
Если это свойство не устанавливается тогда, значение по умолчанию не должно использовать протокол системы защиты.
Как разработчик провайдера LDAP, следует знать, что использование SSL, чтобы соединиться с сервером на порту, который не прислушивается к соединениям SSL, заставляет сокет зависать. Точно так же использование простого сокета, чтобы соединиться с сервером, который прислушивается к соединениям SSL также, приводит к зависанию. Это - характеристика протокола, который некоторые реализации могут хотеть исправлять, но иначе не обязаны делать так. Документация провайдера, однако, должна описать это поведение своим пользователям. См. SSL для информации о том, как использовать SSL.
Например:
env.put(Context.SECURITY_PROTOCOL, "ssl");
| ID атрибута | OID | Ссылка |
|---|---|---|
| Любой ID атрибута с опцией ";binary". | ||
| photo | 0.9.2342.19200300.100.1.7 | |
| personalSignature | 0.9.2342.19200300.100.1.53 | |
| audio | 0.9.2342.19200300.100.1.55 | |
| jpegPhoto | 0.9.2342.19200300.100.1.60 | |
| javaSerializedData | 1.3.6.1.4.1.42.2.27.4.1.7 | |
| thumbnailPhoto | 2.16.128.113533.1.1400.1 | Схема LIP NAC |
| thumbnailLogo | 2.16.128.113533.1.1400.2 | Схема LIP NAC |
| userPassword | 2.5.4.35 | |
| userCertificate | 2.5.4.36 | |
| cACertificate | 2.5.4.37 | |
| authorityRevocationList | 2.5.4.38 | |
| certificateRevocationList | 2.5.4.39 | |
| crossCertificatePair | 2.5.4.40 | |
| x500UniqueIdentifier | 2.5.4.45 |
env.put("java.naming.ldap.attributes.binary",
"mpegVideo myspecialkey");
env.put("java.naming.ldap.control.connect",
new Control[]{ new ManageReferralControl(true) });
Например:
env.put("java.naming.ldap.deleteRDN", "false");
Значение этого свойства является строкой, которая определяет, как псевдонимы разыменовываются во время операций поиска. Следующие значения определяются для этого свойства:
env.put("java.naming.ldap.derefAliases", "searching");
ОТМЕТЬТЕ: это свойство не связано с флагом разыменовывать-ссылок в объекте SearchControls.
env.put("java.naming.ldap.factory.socket",
"javax.net.ssl.SSLSocketFactory");
env.put("java.naming.ldap.ref.separator", ":");
env.put("java.naming.ldap.referral.limit", "5");
Если это свойство не устанавливается тогда, его значением по умолчанию является false.
Например:
env.put("java.naming.ldap.typesOnly", "true");
Если это свойство не устанавливается тогда, провайдер сначала пытается связать использование LDAP v3 и сбои к использованию LDAP v2, если ошибка протокола получается от сервера. Этот failover механизм только используется, когда свойство java.naming.security.authentication указывает анонимный, связывают или простая аутентификация.
Например:
env.put("java.naming.ldap.version", "2");
java.naming.security.sasl.authorizationId
Значение этого свойства является строкой, которая определяет ID авторизации для механизмов SASL.
Если это свойство не устанавливается, то ID авторизации, который передают к механизмам SASL, является пустой строкой. Согласно SASL , используя ID авторизации пустой строки направляет сервер, чтобы получить ID авторизации из учетных данных аутентификации клиента.
Например:
env.put("java.naming.security.sasl.authorizationId",
"dn:cn=administrators,ou=groups,o=sun,c=us");
определяет идентификационные данные, чтобы использовать для авторизации (управление доступом) после успешной аутентификации.
java.naming.security.sasl.realm
Значение этого свойства является строкой, которая определяет информацию области, запрошенную некоторыми механизмами SASL, такими как ОБЗОР-MD5.
Если это свойство не устанавливается, то специфичное для механизма значение по умолчанию, такое как согласованное между клиентом и сервером во время обмена аутентификации используется.
Например:
env.put("java.naming.security.sasl.realm", "webusers");
определяет, что клиент хочет использовать область "веб-пользователей" для аутентификации.
java.naming.security.sasl.callback
Значение этого свойства является экземпляром javax.security.auth.callback.CallbackHandler. Когда провайдер использует механизм SASL, который требует обратных вызовов, механизм SASL использует объект, предоставленный в свойстве. Обработчик обратного вызова должен удовлетворить NameCallback, предоставляя ID аутентификации.
Если это свойство не устанавливается, то провайдер должен использовать обработчик обратного вызова значения по умолчанию, который удовлетворяет NameCallback, используя значение свойства java.naming.security.principal, удовлетворяет PasswordCallback, используя значение свойства java.naming.security.credentials, и удовлетворяет RealmCallback и RealmChoiceCallback (описанный в Java API SASL) использование значения свойства java.naming.security.sasl.realm.
Например:
env.put("java.naming.security.sasl.callback",
new MyCallbackHandler());
предоставляет экземпляр обработчика обратного вызова для механизмов SASL, чтобы использовать.
Значением этого свойства является ', '-separated список качества защиты (qop) значения, используемые, чтобы определить qop предпочтение клиента. Значение qop является одним из
Значением этого свойства является ', '-separated список значений силы шифра, используемых, чтобы определить предпочтение клиента. Значение силы является одним из
Для конфиденциальности в ОБЗОРЕ-MD5 "high" отображается на "3des", "medium" к "rc4" или "des", и "low" к "rc4-56" или "rc4-40".
Значение этого свойства является строковым представлением целого числа, которое определяет максимальный размер получить буфера в байтах, которые клиент готов получить. Если это свойство отсутствует, размер значения по умолчанию определяется механизмом SASL.
Значение этого свойства является или "истиной" или "ложью", определяя, должен ли сервер аутентифицировать клиенту или нет, соответственно. Если это свойство отсутствует, значение по умолчанию является "ложью".
Значение этого свойства является или "истиной" или "ложью", определяя, должен ли выбранный механизм SASL поддерживать прямую тайну между сеансами или нет, соответственно. Если это свойство отсутствует, значение по умолчанию является "ложью".
Значение этого свойства является или "истиной" или "ложью", определяя, должен ли выбранный механизм SASL потребовать удостоверений клиента или нет, соответственно. Если это свойство отсутствует, значение по умолчанию является "ложью".
Значение этого свойства является или "истиной" или "ложью", определяя, не должен ли выбранный механизм SASL быть восприимчивым к простым простым пассивным атакам или нет, соответственно. Если это свойство отсутствует, значение по умолчанию является "ложью".
Значение этого свойства является или "истиной" или "ложью", определяя, не должен ли выбранный механизм SASL быть восприимчивым к активному (несловарь) атаки или нет, соответственно. Если это свойство отсутствует, значение по умолчанию является "ложью".
Значение этого свойства является или "истиной" или "ложью", определяя, не должен ли выбранный механизм SASL быть восприимчивым к атакам с подбором по словарю или нет, соответственно. Если это свойство отсутствует, значение по умолчанию является "ложью".
Значение этого свойства является или "истиной" или "ложью", определяя, не должен ли выбранный механизм SASL принять анонимные входы в систему или нет, соответственно. Если это свойство отсутствует, значение по умолчанию является "ложью".
Имя, предоставленное контексту LDAP, всегда относительно того контекста. Например, учитывая контекст LDAP (lctx) для "dc=widget,dc=com", чтобы назвать записи LDAP в том поддереве, имя относительно "dc=widget,dc=com" должно быть предоставлено. Например, следующий вызов получает атрибуты для записи "cn=John Smith,dc=widget,dc=com".
Attributes attrs = lctx.getAttributes("cn=John Smith");
Точно так же, когда контекст перечисляется, используя любой из методов перечисления (Context.list, Context.listBindings, DirContext.search), возвращенные имена относительно целевого контекста - перечисляемый контекст. Когда отсылки вызываются вместо относительного имени, LDAP или строка URL LDAPS, содержащая полностью определенное имя, возвращаются. (Если перечисление выполнялось, используя простое соединение, строка URL LDAP возвращается; если это было сделано, используя соединение SSL, строка URL LDAPS возвращается.) Формат URL LDAP определяется в .
LDAP URL, которые следуют и URL LDAPS, может быть предоставлен любому из методов контекста. Имя узла и номер порта извлекаются из URL и используются, чтобы связаться с сервером LDAP; схема URL ("ldap" или "ldaps") используется, чтобы определить, используется ли соединение плоскости или SSL. Свойства java.naming.factory.initial И java.naming.provider.url игнорируются. Например,
DirContext ictx = new InitialDirContext();
Attributes attrs = ictx.getAttributes(
"ldap://wserver:389/cn=John Smith,dc=widget,dc=com");
Этот фрагмент кода связывается с сервером LDAP в машине wserver в порту 389, используя простое соединение.
Провайдер LDAP ожидает так ввод и возвращает как выходной все значения атрибута или как String или как объекты byte[]. См. свойство среды java.naming.ldap.attributes.binary для того, которые обрабатываются как byte[] и как расширить список.
ldap://host:port/dn?attributes?scope?filter?extensions
Информация об аутентификации может быть определена в части extensions URL. См. RFC для полного описания формата.
В дополнение к URL LDAP провайдер может также поддерживать нестандартные, но широко используемые URL LDAPS. LDAPS URL используют соединения SSL вместо плоскости (то есть, незащищенные) соединения. У них есть синтаксис, подобный URL LDAP кроме схем, отличаются, и порт значения по умолчанию для URL LDAPS 636 вместо 389.
ldaps://host:port/dn?attributes?scope?filter?extensions
URL играют роль в нескольких местах в JNDI:
За исключением методов поиска, когда LDAP или URL LDAPS передают как имя к начальному контексту, URL не должен содержать запрос ('?') компоненты. Иначе, InvalidNameException бросается поставщиком услуг. Для методов поиска компоненты запроса URL переопределяют любые соответствующие компоненты, предоставленные как параметры. Например, если URL LDAP, содержащий компонент контекста, предоставляется, то тот контекст переопределяет любой контекст, устанавливающий, который можно передать в параметре SearchControls.
Ссылки, referenceable и сериализуемые объекты должны быть сохранены согласно . объекты DirContext должны храниться, храня их атрибуты.
Храня список ссылки RefAddr в атрибут javaReferenceAddress, разделителем, чтобы использовать для того, чтобы разграничить позицию адреса, тип и контент управляют, используя свойство среды java.naming.ldap.ref.separator. Если это свойство среды не определяется, символ хеша '#' должен использоваться в качестве разделителя.
Провайдер использует метод DirectoryManager.getStateToBind, храня объекты в каталоге. Это позволяет объектам любого типа быть преобразованными в одну из этих четырех категорий, упомянутых выше так, чтобы они могли быть сохранены в каталог.
Разрешение, чтобы изменить содержание дерева схемы определяется администратором каталога. Когда дерево схемы изменяется, изменения производятся в схеме, сохраненной на сервере каталогов.
| Имя Привязки | Описание Привязки |
|---|---|
| AttributeDefinition | Корень дерева определения атрибута: плоское пространство имен с атрибутами, идентифицированными их именем или OID. |
| ClassDefinition | Корень "objectclass" дерева определения: плоское пространство имен с классами объектов, идентифицированными их именем или OID. |
| SyntaxDefinition | Корень дерева определения синтаксиса: плоское пространство имен с синтаксисами, идентифицированными их OID. |
| MatchingRule | Корень соответствия дерева правила: плоское пространство имен с соответствием правил, идентифицированных их именем или OID. |
| ExtensionDefinition | Корень дерева расширений: плоское пространство имен с расширениями, идентифицированными их OID. |
| ControlDefinition | Корень дерева средств управления: плоское пространство имен со средствами управления, идентифицированными их OID. |
| SASLMechanism | Корень дерева SASL: плоское пространство имен с механизмами аутентификации SASL, идентифицированными их именем строки. |
Любая из этой привязки может отсутствовать, если базовый каталог не публикует такую информацию о схеме, или поставщик услуг не поддерживает получение их. Если эти имена присутствуют в корневом контексте схемы, однако, у них должна быть привязка, определенная в вышеупомянутой таблице.
Названия атрибута и значения атрибутов этих записей являются нечувствительными к регистру.
У каждого объекта в контексте "AttributeDefinition" есть следующие обязательные и дополнительные атрибуты:
| Идентификатор атрибута | Описание Значения атрибута |
|---|---|
| (Обязательный) NUMERICOID | уникальный идентификатор (OID) |
| ИМЯ | имя атрибута |
| DESC | описание атрибута |
| УСТАРЕВШИЙ | "истина" если устаревший, "ложь" или отсутствующий иначе |
| ГЛОТОК | имя превосходящего атрибута вводит, из которого получается тип этого атрибута |
| РАВЕНСТВО | имя или OID соответствия правила, если равенство, соответствующее позволенный, отсутствующий иначе |
| УПОРЯДОЧИВАНИЕ | имя или OID соответствия правила, упорядочивая соответствие позволенного, отсутствующий иначе |
| ПОДСТРОКА | имя или OID соответствия правила, если подстрока, соответствующая позволенный, отсутствующий иначе |
| СИНТАКСИС | числовой OID синтаксиса значений этого типа |
| ЕДИНСТВЕННОЕ ЗНАЧЕНИЕ | "истина", если атрибут, не многозначный, "ложный" или отсутствующий иначе. |
| КОЛЛЕКТИВНЫЙ | "истина", если атрибут является коллективным, "ложным" или отсутствует иначе. |
| "НИКАКАЯ ПОЛЬЗОВАТЕЛЬСКАЯ МОДИФИКАЦИЯ" | "истина", если не поддающийся изменению пользователем, "ложный" или отсутствующий иначе. |
| ИСПОЛЬЗОВАНИЕ | описание использования атрибута |
Эти атрибуты имеют 1 к 1 корреспонденция именам, определенным в для "AttributeTypeDescription". Все значения атрибута представляются java.lang.String class.
Можно, например, получить объект, представляющий атрибут "cn", используя следующий код:
DirContext schema = ctx.getSchema(""); // get schema tree
DirContext cnSchema = schema.lookup("AttributeDefinition/cn");
Если бы Вы тогда получаете атрибуты "cnSchema" объекта DirContext, Вы видели бы:
NUMERICOID 2.5.4.3 NAME cn SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 DESC Standard Attribute, alias for commonName
Эквивалентный способ получить "cnSchema" состоит в том, если у Вас уже есть атрибут "cn". Следующий код иллюстрирует эту альтернативу:
Attributes attrs = ctx.getAttributes("cn=John", new String[]{"cn"});
Attribute cnAttr = attrs.get("cn");
DirContext cnSchema = cnAttr.getAttributeDefinition();
У каждого объекта в контексте "ClassDefinition" есть следующие обязательные и дополнительные атрибуты:
| Идентификатор атрибута | Описание Значения атрибута |
|---|---|
| (Обязательный) NUMERICOID | уникальный идентификатор (OID) |
| ИМЯ | возразите имени class |
| DESC | возразите описанию class |
| УСТАРЕВШИЙ | "истина" если устаревший, "ложь" или отсутствующий иначе |
| ГЛОТОК | имя превосходящего объектного class, из которого получается этот объектный class |
| КРАТКИЙ ОБЗОР | "истина", если объектный class абстрактен, "ложен" или отсутствует иначе |
| СТРУКТУРНЫЙ | "истина", если объектный class структурен, "ложен" или отсутствует иначе |
| ВСПОМОГАТЕЛЬНЫЙ | "истина", если объектный class является вспомогательным, "ложным" или отсутствует иначе |
| ДОЛЖЕН | список имен типов атрибутов, которые должны присутствовать |
| МАЙ | список имен типов атрибутов, которые могут присутствовать |
Эти атрибуты имеют 1 к 1 корреспонденция именам, определенным в для "ObjectClassDescription". Все значения атрибута представляются java.lang.String class.
Можно, например, получить объект, представляющий объект "страны" class, используя следующий код:
DirContext schema = ctx.getSchema(""); // get schema tree
DirContext countrySchema = schema.lookup("ClassDefinition/country");
Если бы Вы тогда получаете атрибуты "countrySchema" объекта DirContext, Вы видели бы:
NUMERICOID 2.5.6.2 NAME country MAY aci, searchguide, description MUST objectclass, c DESC Standard ObjectClass SUP top
Эквивалентный способ получить "countrySchema" состоит в том, если у Вас уже есть объект "страны". Следующий код иллюстрирует эту альтернативу:
// Read object from directory
DirContext countryObj = (DirContext)ctx.lookup("c=us", new String[]{"country"});
// Get all of object's object class definitions
DirContext objClasses = countryAttr.getSchemaClassDefinition();
// Pick out "country" object class in particular
DirContext countryClass = (DirContext)objClasses.lookup("country");
ОТМЕТЬТЕ: JNDI 1.1's спецификация getSchemaClassDefinition() подразумевает, что поставщик услуг должен возвратить любое из объектных определений class объекта. Эта спецификация является несоответствующей, потому что у объекта обычно есть многократные классы объектов, и приложение могло бы потребовать знания о любых из тех классов объектов в зависимости от того, что это делает. Предложение как иллюстрировано примером выше состоит в том, чтобы возвратить контекст, содержащий все объектные определения class.
У каждого объекта в контексте "SyntaxDefinition" есть следующие обязательные и дополнительные атрибуты:
| Идентификатор атрибута | Описание Значения атрибута |
|---|---|
| (Обязательный) NUMERICOID | уникальный идентификатор (OID) |
| DESC | описание синтаксиса |
Эти атрибуты имеют 1 к 1 корреспонденция именам, определенным в для "SyntaxDescription". Все значения атрибута представляются java.lang.String class.
Можно, например, получить объект, представляющий "1.3.6.1.4.1.1466.115.121.1.15" синтаксиса, используя следующий код:
DirContext schema = ctx.getSchema(""); // get schema tree
DirContext dirStringSchema =
schema.lookup("SyntaxDefinition/1.3.6.1.4.1.1466.115.121.1.15");
Если бы Вы тогда получаете атрибуты "dirStringSchema" объекта DirContext, Вы видели бы:
NUMERICOID 1.3.6.1.4.1.1466.115.121.1.15 DESC Directory String
Эквивалентный способ получить "dirStringSchema" состоит в том, если у Вас уже есть атрибут, у которого есть тот синтаксис (такой как, атрибут "страны"). Следующий код иллюстрирует эту альтернативу:
Attributes attrs = ctx.getAttributes("c=us", new String[]{"country"});
Attribute countryAttr = attrs.get("country");
DirContext dirStringSchema = countryAttr.getSyntaxAttributeDefinition();
То, когда соответствующее правило является расширяемым правилом соответствия, оно должно также содержать, "ПРИМЕНЯЕТ" атрибут, перечисляющий атрибуты, к которым может быть применено это расширяемое правило соответствия.
У каждого объекта в контексте "MatchingRule" есть следующие обязательные и дополнительные атрибуты:
| Идентификатор атрибута | Описание Значения атрибута |
|---|---|
| (Обязательный) NUMERICOID | уникальный идентификатор (OID) |
| ИМЯ | имя соответствия правила |
| DESC | соответствие описания правила |
| УСТАРЕВШИЙ | "истина" если устаревший, "ложь" или отсутствующий иначе |
| СИНТАКСИС | числовой oid синтаксиса, к которому применяется это правило |
| ПРИМЕНЯЕТСЯ | имена типов списка атрибутов, к которым применяется это расширяемое правило соответствия |
Эти атрибуты имеют 1 к 1 корреспонденция именам, определенным в для "MatchingRuleDescription" и "MatchingRuleUseDescription". Все значения атрибута представляются java.lang.String class.
Можно, например, получить объект, представляющий "soundAlikeMatch" синтаксис, используя следующий код:
DirContext schema = ctx.getSchema(""); // get schema tree
DirContext soundMatchSchema =
schema.lookup("MatchingRule/soundAlikeMatch");
Если бы Вы тогда получаете атрибуты "soundMatchSchema" объекта DirContext, Вы видели бы:
NUMERICOID 1.2.3.4.5 NAME soundAlikeMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 (for directory string) APPLIES 2.5.4.41, 2.5.4.15 DESC Home-grown Phonetic match
У каждого объекта в контексте "ExtensionDefinition" есть следующие обязательные и дополнительные атрибуты:
| Идентификатор атрибута | Описание Значения атрибута |
|---|---|
| (Обязательный) NUMERICOID | уникальный идентификатор (OID) |
| DESC | описание расширения |
Все значения атрибута представляются java.lang.String class.
Можно, например, получить объект, представляющий расширение TLS Запуска ("1.3.6.1.4.1.1466.20037") использование следующего кода:
DirContext schema = ctx.getSchema(""); // get schema tree
DirContext startTLSSchema =
schema.lookup("ExtensionDefinition/1.3.6.1.4.1.1466.20037");
Если бы Вы тогда получаете атрибуты "startTLSSchema" объекта DirContext, Вы видели бы:
NUMERICOID 1.3.6.1.4.1.1466.20037 DESC Start TLS (see RFC 2830)
У каждого объекта в контексте "ControlDefinition" есть следующие обязательные и дополнительные атрибуты:
| Идентификатор атрибута | Описание Значения атрибута |
|---|---|
| (Обязательный) NUMERICOID | уникальный идентификатор (строка) |
| DESC | описание управления |
Все значения атрибута представляются java.lang.String class.
Можно, например, получить объект, представляющий ("1.2.840.113556.1.4.473") использование следующего кода:
DirContext schema = ctx.getSchema(""); // get schema tree
DirContext svrSortSchema =
schema.lookup("ControlDefinition/1.2.840.113556.1.4.473");
Если бы Вы тогда получаете атрибуты "svrSortSchema" объекта DirContext, Вы видели бы:
NUMERICOID 1.2.840.113556.1.4.473 DESC server-side sorting of search results
У каждого объекта в контексте "SASLMechanism" есть следующие обязательные и дополнительные атрибуты:
| Идентификатор атрибута | Описание Значения атрибута |
|---|---|
| (Обязательное) ИМЯ | Имя механизма SASL |
| DESC | Описание механизма SASL |
Все значения атрибута представляются java.lang.String class.
Можно, например, получить объект, представляющий ВНЕШНИЙ механизм SASL, используя следующий код:
DirContext schema = ctx.getSchema(""); // get schema tree
DirContext saslExternalSchema =
schema.lookup("SASLMechanism/EXTERNAL");
Если бы Вы тогда получаете атрибуты "saslExternalSchema" объекта DirContext, Вы видели бы: NAME EXTERNAL DESC EXTERNAL SASL mechanism (RFC 2222)
| Код ошибки LDAP | Исключение или Действие |
|---|---|
| успех (0) | Сообщите об успехе. |
| operationsError (1) | NamingException |
| protocolError (2) | CommunicationException |
| timeLimitExceeded (3) | TimeLimitExceededException |
| sizeLimitExceeded (4) | SizeLimitExceededException |
| compareFalse (5) | Используемый DirContext.search() и не генерирует исключение. |
| compareTrue (6) | Используемый DirContext.search() и не генерирует исключение. |
| authMethodNotSupported (7) | AuthenticationNotSupportedException |
| strongAuthRequired (8) | AuthenticationNotSupportedException |
| partialResults (9) | Если java.naming.referral устанавливается в ignore, или содержание ошибки не содержит отсылку, бросает PartialResultException. Иначе, используйте содержание, чтобы создать отсылку. |
| отсылка (10) | Если java.naming.referral устанавливается в ignore, тогда бросают PartialResultException. Если это устанавливается в throw, тогда бросают ReferralException. Если это будет установлено в follow тогда, то провайдер должен следовать за отсылкой. Если значение для java.naming.ldap.referral.limit превышается, в то время как следование за отсылкой тогда бросает LimitExceededException. |
| adminLimitExceeded (11) | LimitExceededException |
| unavailableCriticalExtension (12) | OperationNotSupportedException |
| confidentialityRequired (13) | AuthenticationNotSupportedException |
| saslBindInProgress (14) | Используемый внутренне провайдером LDAP во время многоступенчатой аутентификации SASL. |
| noSuchAttribute (16) | NoSuchAttributeException |
| undefinedAttributeType (17) | InvalidAttributeIdentifierException |
| inappropriateMatching (18) | InvalidSearchFilterException |
| constraintViolation (19) | InvalidAttributeValueException |
| attributeOrValueExists (20) | AttributeInUseException |
| invalidAttributeSyntax (21) | InvalidAttributeValueException |
| noSuchObject (32) | NameNotFoundException |
| aliasProblem (33) | NamingException |
| invalidDNSyntax (34) | InvalidNameException |
| isLeaf (35) | Используемый провайдером; обычно не генерирует исключение. |
| aliasDereferencingProblem (36) | NamingException |
| inappropriateAuthentication (48) | AuthenticationNotSupportedException |
| invalidCredentials (49) | AuthenticationException |
| insufficientAccessRights (50) | NoPermissionException |
| занятый (51) | ServiceUnavailableException |
| недоступный (52) | ServiceUnavailableException |
| unwillingToPerform (53) | OperationNotSupportedException |
| loopDetect (54) | NamingException |
| namingViolation (64) | InvalidNameException |
| objectClassViolation (65) | SchemaViolationException |
| notAllowedOnNonLeaf (66) | ContextNotEmptyException |
| notAllowedOnRDN (67) | SchemaViolationException |
| entryAlreadyExists (68) | NameAlreadyBoundException |
| objectClassModsProhibited (69) | SchemaViolationException |
| affectsMultipleDSAs (71) | NamingException |
| другой (80) | NamingException |
Обновите свойства среды контекста. Если многократные контексты совместно используют тот же самый набор свойств среды, провайдер должен заботиться, чтобы только изменить среду намеченного контекста. Изменение свойства среды могло бы потребовать изменений к существующему соединению, которое использует контекст.
Удалите свойства среды контекста. Если многократные контексты совместно используют тот же самый набор свойств среды, провайдер должен заботиться, чтобы только изменить среду намеченного контекста. Изменение свойства среды могло бы потребовать изменений к существующему соединению, которое использует контекст.
В формах поиска, которые принимают строковый фильтр как параметр, синтаксис фильтра следует за исключением того, что символы Unicode также позволяются. Использование символов Unicode предпочтительно для использования закодированных октетов UTF-8. Поставщик услуг ответственен за преобразование символов Unicode в их соответствующее представление UTF-8 для передачи к серверу. Например, альфа греческой буквы может быть определена в строковом фильтре или как "\u03B1" или как "\\CE\\B1".
В форме search(Name, Attributes) и связанные методы, параметр Attributes преобразовывается в строковый фильтр, создавая соединительное выражение из его элементов. Каждое значение атрибута обрабатывается как литерал; поэтому '*' и другие специальные символы, определенные в , которые появляются в значениях атрибута, должен быть оставлен согласно правилам в . Например, значение атрибута '*' должно быть закодировано как строка "\\2a".
В форме search(Name, String filterExpr, Object[] filterArgs) и его перегруженный метод String, "{цифровое}" расширение делается в фильтре, включая значения от filterArgs. Каждый" {цифровой}" компонент может появиться вместо "attr" или "значения" в Разделе 4 от
Объекты в filterArgs должны быть закодированы следующим образом:
API SASL Java зависит от (JAAS), который оказывает поддержку обратного вызова для механизмов SASL, которые должны получить или предоставить пользователя/информацию по применению непосредственно.
Некоторые механизмы SASL требуют идентификационных данных аутентифицируемого объекта. Это известно как ID аутентификации. Некоторые механизмы SASL, как ОБЗОР-MD5, требуют использования пароля и/или области. По умолчанию провайдер предоставляет значение свойства java.naming.security.principal как ID аутентификации к любому механизму SASL, который требует ID аутентификации, значения свойства java.naming.security.credentials как пароль, и значение свойства java.naming.security.sasl.realm как область. Чтобы переопределить эти значения по умолчанию, используйте свойство java.naming.security.sasl.callback.
Механизмы SASL поддерживают понятие идентификационных данных авторизации или ID авторизации, который является объектом, к которому сервер должен предоставить доступ, если аутентификация успешно выполняется. Если свойство java.naming.security.sasl.authorizationId было установлено, то его значение используется в качестве ID авторизации. Иначе, пустая строка используется в качестве ID авторизации, который направляет сервер, чтобы получить ID авторизации из учетных данных аутентификации клиента.
См. свойства SASL для описания свойств, используемых поставщиком услуг LDAP для того, чтобы поддерживать SASL.
В дополнение к этим свойствам могли бы быть свойства, требуемые для определенных механизмов SASL. Например, механизм SASL, который поддерживает конфиденциальность и целостность, должен знать качество о защите, которой требует клиент. Свойства, такие как они передают к механизму SASL через свойства среды. См. документацию JNDI для того, как установить свойства среды.
Например, если приложение нуждается в конфиденциальности, оно может сделать так при использовании вызова, такого как:
env.put("javax.security.sasl.qop", "auth-conf");
прежде, чем передать env начальному конструктору контекста. См. Java API SASL для деталей об этих свойствах.
Несколько расширений LDAP и средств управления определяются IETF LDAPEXT рабочая группа.
("1.3.6.1.4.1.1466.20037") поддерживается классами StartTlsResponse и StartTlsRequest. Провайдер LDAP должен обеспечить конкретную реализацию абстрактного StartTlsResponse class и сделать его реализацию доступной для провайдера LDAP. См. описание в StartTlsRequest.createExtendedResponse. Как правило, реализация StartTlsResponse нуждалась бы в доступе к структурам данных провайдера LDAP.
Поставщик услуг LDAP должен выполнить проверку имени узла после того, как Начинают переговоры TLS как определено в RFC 2830. Если бы сервер LDAP был обнаружен автоматически при использовании информации в DNS (как описано в разделе URL), то провайдер должен использовать доменное имя, полученное из отличительного имени как имя узла, чтобы проверить, как рекомендующийся .
Приложение JNDI может зарегистрироваться для событий, которые происходят в каталоге, таком как дополнение или удаление записи, или модификация записи. Приложения могут также зарегистрироваться для незапрашиваемых уведомлений.
Провайдер поддерживает SSL согласно Расширению Защищенного сокета Java (JSSE) спецификация. SSL активируется, устанавливая свойство среды java.naming.security.protocol следующим образом:
env.put(Context.SECURITY_PROTOCOL, "ssl");и выбирая имя узла и номер порта сервера LDAP, который поддерживает SSL. Как только соединение SSL было установлено, последующие обмены протокола LDAP имеют место по тому безопасному соединению.
Если кроме того аутентификация LDAP также требуется тогда java.naming.security.authentication, java.naming.security.principal, и свойства среды java.naming.security.credentials должны быть установлены, как соответствующие. Если аутентификация LDAP требуется, и учетные данные SSL должны быть снова использованы для аутентификации LDAP тогда набор свойство среды java.naming.security.authentication, чтобы выбрать ВНЕШНИЙ механизм SASL, следующим образом:
env.put(Context.SECURITY_AUTHENTICATION, "EXTERNAL");