簡體   English   中英

如何在LDAP中使用DN和密碼在Java中綁定?

[英]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中的以下內容:

  1. 在環境中InitialLdapContext具有足夠信息的InitialDirContextInitialLdapContext以引起登錄,即安全主體和憑證,或者

  2. 在最初獲得的LdapContext上調用reconnect() ,在環境中沒有任何安全信息,或者與不同主體相關的安全信息,但其環境隨后被修改。

使用LDAP建立與目錄服務器的連接時,連接狀態未經身份驗證。 假設服務器管理員允許未經身份驗證的請求,則可以在未經身份驗證的連接上傳輸請求。 BIND請求用於更改連接的身份驗證狀態。

下面是搜索和使用驗證的例子UnboundID LDAP SDKSimpleBindExample.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM