在我的應用程序中,我使用LDAP綁定驗證機制。即使任何一個不匹配(用戶名或密碼),我都會收到AuthenticationException。
我想顯示錯誤消息:用戶名不匹配或密碼不匹配。目前,使用AuthenticationException無法獲得適當的細節。LDAP/AD - 如何確定用戶名或密碼是否不匹配
是否有任何現有的API將幫助?或需要使用API進行查詢?
在此先感謝。
在我的應用程序中,我使用LDAP綁定驗證機制。即使任何一個不匹配(用戶名或密碼),我都會收到AuthenticationException。
我想顯示錯誤消息:用戶名不匹配或密碼不匹配。目前,使用AuthenticationException無法獲得適當的細節。LDAP/AD - 如何確定用戶名或密碼是否不匹配
是否有任何現有的API將幫助?或需要使用API進行查詢?
在此先感謝。
如果用戶提供用戶名和密碼進行身份驗證,最好不要告訴他們登錄失敗的確切原因。你總是告訴他們用戶名和密碼不匹配,所以攻擊者不知道是否存在特定的用戶名。
我同意最佳做法是不說明原因。
-
但是,如果你一定要做到不管是什麼:
不要與用戶名一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();
}
您可以共享Java代碼以進行評論 –
我沒有全局上下文。是否有辦法查詢用戶ID是否存在或沒有提供密碼(握手ldap服務器)? –
你可以簡單地用管理員用戶名和密碼實例化新的InitialLdapContext來進行搜索。 – cshu
來自Microsoft Active Directory的returned error codes提供了該信息。
「例外是[LDAP:錯誤代碼49 - 80090308:LdapErr:DSID-0Cxxxxxx,註釋:AcceptSecurityContext錯誤,數據,vece]」。
數據值將通知問題。
對於用戶名和密碼不匹配,我得到相同的錯誤消息「javax.naming.AuthenticationException:[LDAP:錯誤代碼49 - 80090308:LdapErr:DSID-0C090334,評論:AcceptSecurityContext錯誤,數據52e,vece 」 –
有沒有辦法查詢用戶ID是否存在或沒有提供密碼(握手ldap服務器)? –
我沒有在UI中顯示哪一個錯誤,但是我的代碼需要了解哪一個與用戶名或密碼不匹配 –