如果在Java应用程序中提供的用户名和密码正确,我想问一个LDAP服务器。
我最终使用了这个函数的jndi(这是我用来探索返回异常消息的LDAP的测试函数):
public static String checkCredentials(String securityPrincipal,
String password,
String ldapUrl,
String securityAuthentication)
{
String userVerify = "";
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, ldapUrl);
env.put(Context.SECURITY_AUTHENTICATION, securityAuthentication);
env.put(Context.SECURITY_PRINCIPAL, securityPrincipal);
env.put(Context.SECURITY_CREDENTIALS, password);
try {
DirContext authContext = new InitialDirContext(env);
userVerify = testDescription + " - Success";
authContext.close();
} catch (AuthenticationException authEx) {
userVerify = "AuthenticationException: " + authEx.getMessage();//"Authentication failed!";
} catch (NamingException namEx) {
userVerify = "NamingException: " + namEx.getMessage();//"Something went wrong!";
}
return userVerify;
}
当我通过传递正确的checkCredentials
(在我的情况下是ldapUrl
)来调用ldap://192.168.48.60:389
时,我总是得到结果(函数返回String
):< / p>
AuthenticationException:[LDAP:错误代码49 - 80090308:LdapErr: DSID-0C0903A8,评论:AcceptSecurityContext错误,数据52e,v1db1]
此page表示它是身份验证错误(49)并且“用户名有效但密码/凭据无效”(52e)。
我为securityPrincipal
尝试了所有这些:
约翰
约翰@ myCompany的
CN =约翰,康涅狄格州
CN = john,OU =内部用户,DC = mycompany
password
和secuirityAuthentication
似乎被忽略了。
我尝试从http://www.ldapadmin.org/安装LDAP管理员,并从中得到:
LDAP错误!证书无效:80090308:LdapErr:DSID-0C0903A8, comment:AcceptSecurityContext错误,数据52e,v1db1。
传递给函数的令牌无效。
不知怎的,这告诉我更多“无效令牌”。
任何指针?我被卡住了。
答案 0 :(得分:0)
传递&#34;无&#34;而不是&#34;简单&#34;在securityAuthentication中完成了这项工作。
至少没有例外,即使passowrd错误,即使UserVerifyT返回成功,我也会像过去那样通过检索用户的邮件来处理这个,如果邮件被返回密码就可以了。