2017-02-13 31 views
1


   在我的應用程序中,我使用LDAP綁定驗證機制。即使任何一個不匹配(用戶名或密碼),我都會收到AuthenticationException。
   我想顯示錯誤消息:用戶名不匹配或密碼不匹配。目前,使用AuthenticationException無法獲得適當的細節。LDAP/AD - 如何確定用戶名或密碼是否不匹配

是否有任何現有的API將幫助?或需要使用API​​進行查詢?

在此先感謝。

回答

0

如果用戶提供用戶名和密碼進行身份驗證,最好不要告訴他們登錄失敗的確切原因。你總是告訴他們用戶名和密碼不匹配,所以攻擊者不知道是否存在特定的用戶名。

+0

我沒有在UI中顯示哪一個錯誤,但是我的代碼需要了解哪一個與用戶名或密碼不匹配 –

0

我同意最佳做法是不說明原因。

-

但是,如果你一定要做到不管是什麼:

不要與用戶名一search來檢查用戶名存在。如果它不存在,那就是錯誤。

如果用戶存在並繼續進行身份驗證,但是您收到AuthenticationException,那麼它是一個錯誤的密碼。

-

編輯:

If(checkUserExists(username)){ 
    //construct the hashtable environment 
    //... 
    ht.put(Context.SECURITY_PRINCIPAL, username); 
    ht.put(Context.SECURITY_PRINCIPAL, password); 
    //... 
    try { 
     localLdapContent = new InitialLdapContext(ht, null); 
    } catch (Exception e) { 
     //suppose it's a wrong password 
    } 
}else{ 
    //error user doesn't exist 
} 

您需要檢查用戶的所有請求的權限的另一個LDAP連接。

boolean checkUserExists(String username) { 
    //... 
    ht_administrator.put(Context.SECURITY_PRINCIPAL, admin_username); 
    ht_administrator.put(Context.SECURITY_PRINCIPAL, admin_password); 
    //... 
    adminconn = new InitialLdapContext(ht_administrator, null); 
    return adminconn.search(
     "uid="+username+",ou=people,dc=example,dc=com", "(objectclass=*)", searchControls 
    ).hasMore(); 
} 
+0

您可以共享Java代碼以進行評論 –

+0

我沒有全局上下文。是否有辦法查詢用戶ID是否存在或沒有提供密碼(握手ldap服務器)? –

+0

你可以簡單地用管理員用戶名和密碼實例化新的InitialLdapContext來進行搜索。 – cshu

0

來自Microsoft Active Directory的returned error codes提供了該信息。

「例外是[LDAP:錯誤代碼49 - 80090308:LdapErr:DSID-0Cxxxxxx,註釋:AcceptSecurityContext錯誤,數據,vece]」。

數據值將通知問題。

+0

對於用戶名和密碼不匹配,我得到相同的錯誤消息「javax.naming.AuthenticationException:[LDAP:錯誤代碼49 - 80090308:LdapErr:DSID-0C090334,評論:AcceptSecurityContext錯誤,數據52e,vece 」 –

+0

有沒有辦法查詢用戶ID是否存在或沒有提供密碼(握手ldap服務器)? –

相關問題