gpt4 book ai didi

java - LDAP 身份验证查询

转载 作者:行者123 更新时间:2023-11-30 07:20:26 25 4
gpt4 key购买 nike

  1. 我在 Java LDAP 身份验证 (AD) 方面遇到问题。我不明白这个 LDAP 身份验证是如何发生的

下面的代码是他们尝试获取 InitialDirContext,其中包含用户名和密码的 LDAP 服务器的所有详细信息,如果它抛出异常,则返回代码是基于此确定的。

private void doSimpleAuthentication() {
try {
String hostURL = "ldap://" + hostName + ":" + port + "/";
env.put(Context.PROVIDER_URL, hostURL);
env.put(Context.SECURITY_AUTHENTICATION, "simple");

String principal = userName + "@" + domain;

// First connect to LDAP Server using Directory Manager credentials

DirContext ctx = connectToDirServer(principal, password);
returnCode = VALID_USER;

if (warningPeriod >= 0) {
String filter = "(sAMAccountName=" + userName + ")";
SearchControls ctrl = new SearchControls();
ctrl.setSearchScope(SearchControls.SUBTREE_SCOPE);
NamingEnumeration results = ctx.search(baseDn, filter, ctrl);

if (results != null && results.hasMoreElements()) {
SearchResult result = (SearchResult) results.next();
String attPrincipal = (result).getName() + "," + baseDn;

if ((!isPwdNeverExpires(result)) && isPasswordNearingExpiry(ctx, attPrincipal)) {
returnCode = PASSWORD_NEARING_EXPIRY;
}
}
}
if (ctx != null) ctx.close();
} catch (CommunicationException e) {
errorMessage = e.getMessage();
errorStackTrace = AgsUtil.convertToString(e);
returnCode = SERVER_NOT_AVAILABLE;
} catch (Exception e) {
errorMessage = e.getMessage();
errorStackTrace = AgsUtil.convertToString(e);
returnCode = UNKNOWN_ERROR;
if (errorMessage.indexOf("525") != -1 || errorMessage.indexOf("successful bind must be completed") != -1) {
returnCode = USER_NOT_FOUND;
} else if (errorMessage.indexOf("52e") != -1) {
returnCode = INVALID_PASSWORD;
} else if (errorMessage.indexOf("701") != -1 || errorMessage.indexOf("532") != -1 || errorMessage.indexOf("773") != -1) {
returnCode = PASSWORD_EXPIRED;
} else if (errorMessage.indexOf("533") != -1) {
returnCode = USER_DISABLED;
} else if (errorMessage.indexOf("775") != -1) {
returnCode = USER_LOCKOUT;
} else if (errorMessage.indexOf("530") != -1) {
returnCode = LOGON_DENIED_AT_THIS_TIME;
}
}
}
public DirContext connectToDirServer(String distinguishedName, String password) throws Exception {
env.put(Context.SECURITY_PRINCIPAL, distinguishedName);
env.put(Context.SECURITY_CREDENTIALS, password);
return new InitialDirContext(env);
}

2.我在客户处遇到了一个问题,如果在 LDAP(AD) 中找不到用户,它会将状态代码返回为“INVALID_USERID_PASSWORD”而不是“USER_NOT_FOUND”。客户要求我提供以下信息

针对应用程序到 ldap 服务器的查询,或者换句话说,作为 ldap 查询传递的请求字符串是什么。请参阅下面有关 LDAP 查询的一些信息。

您可以在此处引用示例的引用链接..

http://www.google.com/support/enterprise/static/postini/docs/admin/en/dss_admin/prep_ldap.html

如何进行,我没有找到关于如何使用这些查询的任何信息。用上面的代码。

最佳答案

当 BIND 请求中的条目不存在时,LDAP 目录服务器可能会返回 invalid password 的结果代码。它可以防止攻击者知道条目是否存在。

关于java - LDAP 身份验证查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14017538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com