[英]User authentication using LDAP and Java
我正在嘗試使用LDAP對用戶進行身份驗證。 但是,密碼是在LDAP中散列的SSHA。 當我向ldap發送明文密碼時,如何驗證uid和密碼。 這是我的代碼
Properties initialProperties=new Properties();
initialProperties.put( Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
initialProperties.put(Context.PROVIDER_URL,"ldap://localhost:10389");
initialProperties.put(Context.SECURITY_AUTHENTICATION,"simple");
initialProperties.put(Context.SECURITY_PRINCIPAL,"uid=admin,ou=system");
initialProperties.put(Context.SECURITY_CREDENTIALS,"secret");
NamingEnumeration<?> results = null;
try
{
DirContext ctx = new InitialDirContext(initialProperties);
System.out.println(ctx+"222 success");
SearchControls controls = new SearchControls();
controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
String filter = "(&(objectClass=inetOrgPerson)(uid=" + uID + ")(userPassword="+pwd+")";
results = ctx.search("", filter, controls);
if (results.hasMore()) {
System.out.println("User found");
return true;
} else {
System.out.println("User not found");
return false;
}
}
catch (Exception e)
{
return false;
}
sysout總是找不到用戶,因為它無法將明文密碼與ssha哈希密碼相匹配? 如何在發送到ldap之前將密碼轉換為SSHA?這是解決此問題的正確方法嗎?
您應該使用ContextSource.getContext(principal, credentials)
來驗證用戶。
獲取使用提供的主體和憑據進行身份驗證的DirContext實例。 通常用於普通認證目的。 請注意,此方法永遠不會使用本機Java LDAP池,即使此實例已配置為執行此操作。 這是為了強制目標目錄中的密碼更改盡快生效。
出於安全原因,密碼是經過哈希處理的,您應始終遵從LDAP服務器對用戶進行身份驗證,這是其中一個主要用途。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.