[英]How to bind in Java using DN and Password in LDAP?
我想從LDAP中搜索用戶,在獲得用戶之后我想使用他的DN和密碼連接(驗證)該特定用戶我已成功獲取DN但不知道如何綁定它?
以下是我從官方文檔中獲取的示例:
// Set up the environment for creating the initial context
Hashtable env = new Hashtable();
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");
DirContext ctx = new InitialDirContext(env);
您必須選擇正確的身份驗證模型。 我以前嘗試過並且工作正常。
LDAP bind()操作對應於JNDI中的以下內容:
在環境中InitialLdapContext
具有足夠信息的InitialDirContext
或InitialLdapContext
以引起登錄,即安全主體和憑證,或者
在最初獲得的LdapContext
上調用reconnect()
,在環境中沒有任何安全信息,或者與不同主體相關的安全信息,但其環境隨后被修改。
使用LDAP建立與目錄服務器的連接時,連接狀態未經身份驗證。 假設服務器管理員允許未經身份驗證的請求,則可以在未經身份驗證的連接上傳輸請求。 BIND請求用於更改連接的身份驗證狀態。
下面是搜索和使用驗證的例子UnboundID LDAP SDK : SimpleBindExample.java 。 此示例搜索給定基礎對象,命名屬性和用戶名的條目,然后嘗試使用simple bind
進行身份驗證。 使用SASL綁定的示例可以很容易地構建。
如果您已使用憑據打開LdapContext ,則可以復制它,在其環境中更改principal +憑證並嘗試重新連接:
LdapContext userContext = ldapContext.newInstance(null); // copy context
userContext.addToEnvironment(InitialDirContext.SECURITY_PRINCIPAL, userDn);
userContext.addToEnvironment(InitialDirContext.SECURITY_CREDENTIALS, password);
userContext.reconnect(null); // throws NamingException if creds wrong
userContext.close();
如果它拋出NamingException,則憑據是錯誤的。 它是成功的,憑據是可以的。 ;)
(如果您只有LdapContext,而不是InitialDirContext,那么這很有用。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.