Spec-Zone .ru
спецификации, руководства, описания, API
|
В LDAP информация аутентификации предоставляется в "связывать" работе. В LDAP v2, клиент инициирует соединение с сервером LDAP, отправляя сервер "связывать" работа, которая содержит информацию об аутентификации.
В LDAP v3, эта работа служит той же самой цели, но это является дополнительным. Клиент, который отправляет запрос LDAP, не делая "связывание", обрабатывается как анонимный клиент (см. Анонимный раздел для деталей). В LDAP v3, "связывать" работа может быть отправлена в любое время, возможно не раз, во время соединения. Клиент может отправить "связывать" запрос в середине соединения, чтобы изменить его идентификационные данные. Если запрос успешен, то все выдающиеся запросы, которые используют старые идентификационные данные на соединении, отбрасываются, и соединение связывается с новыми идентификационными данными.
Информация аутентификации, предоставленная в "связывать" работе, зависит от механизма аутентификации, который выбирает клиент. См. Механизмы аутентификации для обсуждения механизма аутентификации.
В JNDI информация об аутентификации определяется в свойствах среды. Когда Вы создаете начальный контекст при использовании InitialDirContext class (или его суперкласс или подкласс), Вы предоставляете ряд свойств среды, некоторые из которых могли бы содержать информацию об аутентификации. Можно использовать следующие свойства среды, чтобы определить информацию об аутентификации.
Когда начальный контекст создается, базовый поставщик услуг LDAP извлекает информацию об аутентификации из этих свойств среды и использует LDAP, "обязывают" работу передавать их к серверу.
following example
шоу, как, при использовании простого пароля в виде открытого текста, клиент аутентифицирует к серверу LDAP.
// Set up the environment for creating the initial context Hashtable<String, Object> env = new Hashtable<String, Object>(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.PROVIDER_URL, "ldap://localhost:389/o=JNDITutorial"); // Authenticate as S. User and password "mysecret" env.put(Context.SECURITY_AUTHENTICATION, "simple"); env.put(Context.SECURITY_PRINCIPAL, "cn=S. User, ou=NewHires, o=JNDITutorial"); env.put(Context.SECURITY_CREDENTIALS, "mysecret"); // Create the initial context DirContext ctx = new InitialDirContext(env); // ... do something useful with ctx
Если Вы хотите использовать различную информацию об аутентификации для существующего контекста, то можно использовать Context.addToEnvironment() и
following example
были созданы шоу, как информация об аутентификации контекста изменяется на "none" после контекста.
// Authenticate as S. User and the password "mysecret" env.put(Context.SECURITY_AUTHENTICATION, "simple"); env.put(Context.SECURITY_PRINCIPAL, "cn=S. User, ou=NewHires, o=JNDITutorial"); env.put(Context.SECURITY_CREDENTIALS, "mysecret"); // Create the initial context DirContext ctx = new InitialDirContext(env); // ... do something useful with ctx // Change to using no authentication ctx.addToEnvironment(Context.SECURITY_AUTHENTICATION, "none"); // ... do something useful with ctx
Аутентификация может перестать работать по ряду причин. Например, если Вы предоставляете неправильную информацию аутентификации, такую как неправильный пароль или основное имя, затем AuthenticationException бросается.
Вот an example
это - изменение предыдущего примера. На сей раз неправильный пароль заставляет аутентификацию перестать работать.
// Authenticate as S. User and give an incorrect password env.put(Context.SECURITY_AUTHENTICATION, "simple"); env.put(Context.SECURITY_PRINCIPAL, "cn=S. User, ou=NewHires, o=JNDITutorial"); env.put(Context.SECURITY_CREDENTIALS, "notmysecret");
Это производит следующий вывод.
javax.naming.AuthenticationException: [LDAP: error code 49 - Invalid Credentials] ...
Поскольку различные серверы поддерживают различные механизмы аутентификации, Вы могли бы запросить механизм аутентификации, который не поддерживает сервер. В этом случае AuthenticationNotSupportedException будет брошен.
Вот an example
это - изменение предыдущего примера. На сей раз неподдерживаемый механизм аутентификации ("custom") заставляет аутентификацию перестать работать.
// Authenticate as S. User and the password "mysecret" env.put(Context.SECURITY_AUTHENTICATION, "custom"); env.put(Context.SECURITY_PRINCIPAL, "cn=S. User, ou=NewHires, o=JNDITutorial"); env.put(Context.SECURITY_CREDENTIALS, "mysecret");
Это производит следующий вывод.
javax.naming.AuthenticationNotSupportedException: custom ...