2013-07-25 62 views
0

我是LDAP驗證的新用戶。我想用他們的LDAP憑證來認證用戶。 爲此,我從服務器獲取了應用程序憑據,以便我可以驗證其他用戶。應用程序用戶對用戶的LDAP驗證

我作爲應用程序的用戶憑據如:

Test LDAP Server IP: xx.xx.xx.xx 
Port: 389 
Bind DN:uid=uidxx,ou=applications,dc=dcxx 
password: passxx 

爲了驗證這個用戶,我寫的代碼爲

public String ldap() 
{ 
     String value=null; 
     SearchControls constraints= new SearchControls(); 
     Hashtable<String, String> env= new Hashtable<String, String>(); 
     env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory"); 
     env.put(Context.PROVIDER_URL,"ldap://xx.xx.xx.xx:389"); 
     env.put(Context.SECURITY_AUTHENTICATION, "simple"); 
     env.put(Context.SECURITY_PRINCIPAL,"uid=uidxx, ou=applications, dc=dcxx"); 
     env.put(Context.SECURITY_CREDENTIALS,"passxx"); 

     try { 
      DirContext ctx = new InitialDirContext(env); 
      value = "Done with it"; 

     } 
     catch(AuthenticationException e) 
     { 
      value = "Invalid User name or password"; 
     } 
     catch (NamingException e) { 
      e.printStackTrace(); 
      value = "Exception occurred"; 

     } 

     return value; 
    } 

我返回值作爲"Done with it"

現在我想要認證其他用戶的郵件ID和密碼是我所知道的。 它就像我想驗證其他用戶使用他們的mailid,密碼,併爲此我得到了uidxx和passxx來驗證它們。 我應該怎麼做?

沒有從其他來源獲得太多幫助。

謝謝

回答

0

當對LDAP常見的工作流程認證是

  1. 綁定到LDAP使用您的憑據。該用戶必須至少對用戶的子樹進行只讀訪問。通常它是ou = People,ou = Domain,dc = com或類似的。
  2. 查詢LDAP服務器進行用戶的DN(這裏是ANR可能是有用的)
  3. 嘗試使用用戶的DN和密碼提供給您的應用程序

這工作,因爲這是很常見的給綁定到LDAP每個用戶在數據庫中的RW權限。如果您希望用戶能夠更改自己的密碼非常有用。

+0

感謝tomas789。我只讀了數據庫服務器的訪問權限。我的憑證是uidxx,passxx和應用程序,如上所述。現在,這些憑證用於驗證我的身份,以便使用他們的郵件ID和密碼驗證其他用戶。上述代碼驗證了我的成功。現在我想在我的應用程序中驗證其他人。我應該怎麼做? –

+1

@Optimus我很確定我已經回答了這個問題。在上述第1步中,您使用您的憑證進行綁定,並在第3步中使用USER的憑證進行綁定。如果它成功用戶提供的有效憑證,否則他沒有。如果你已經知道這一點,你可以直接跳到步驟3(當用戶提供電子郵件地址或名稱或類似的東西時,這個步驟通常不是特別的),所以步驟1和步驟2只需獲取用戶的DN(不是你的) – tomas789