- Java LDAP 認証 (AD) に問題があります。この LDAP 認証がどのように行われるのか理解できません
以下は、戻りコードが決定される例外をスローした場合に、ユーザー名とパスワードを使用して LDAP サーバーのすべての詳細を含む InitialDirContext を取得しようとするコードです。
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) で見つからない場合、ステータス コードが「USER_NOT_FOUND」ではなく「INVALID_USERID_PASSWORD」として返されます。顧客から以下の情報を提供するように依頼されました。情報
アプリケーションに対してldapサーバーに送信されるクエリ、つまり、ldapクエリとして渡されるリクエスト文字列は何ですか。以下の LDAP クエリに関する情報を参照してください。
ここでサンプルの参照リンクを参照できます。
http://www.google.com/support/enterprise/static/postini/docs/admin/en/dss_admin/prep_ldap.html
続行する方法と、これらのクエリの使用方法に関する情報が見つかりません。上記のコードで。