Я вытягиваю свои волосы, пытаясь заставить LDAP-аутентификацию работать с Active Directory.FailedLoginException, возникающее при использовании JAAS LdapLoginModule для аутентификации с помощью ActiveDirectory
Мы только что установили SharePoint Server 2010, и мы подумали, что было бы неплохо также аутентифицировать пользователей в Active Directory, учитывая, что он уже существует для SharePoint. Наша среда - Windows Server 2008 R2 Standard.
У меня есть один пользователь с именем пользователя [email protected]
Согласно этому ответу https://serverfault.com/a/130556 мой провайдер URL должен быть ldap://192.168.0.81:389/CN=Users,DC=rdl,DC=com,DC=tw
(обратите внимание, что вместо того, чтобы использовать имя хоста vm-sps.rdl.com.tw, Я избрано использовать IP-адрес, как у меня не было времени, чтобы настроить запись DNS для указанного сервера)
Просто, чтобы убедиться, что я выполнить команду Dsquery на сервере:
Однако, Я просто не могу получить работу по аутентификации. Я пробовал все три типа JAAS конфигурации в соответствии с LdapLoginModule API
Ниже приведены ошибки я сталкиваюсь:
1. Поисково первый режим:
ПРИМЕЧАНИЕ: Я НЕ указан authzIdentity, как Я не имею, что установка на AD
JAAS Config:
AESLogin_AD1 {
com.sun.security.auth.module.LdapLoginModule REQUIRED
userProvider="ldap://192.168.0.81:389/CN=Users,DC=rdl,DC=com,DC=tw"
userFilter="(&(uid={USERNAME})(objectClass=User))"
useSSL=false
debug=true;
};
Результат:
[LdapLoginModule] search-first mode; SSL disabled
[LdapLoginModule] user provider: ldap://192.168.0.81:389/CN=Users,DC=rdl,DC=com,DC=tw
[LdapLoginModule] searching for entry belonging to user: [email protected]
[LdapLoginModule] authentication failed
[LdapLoginModule] aborted authentication
javax.security.auth.login.FailedLoginException: Cannot find user's LDAP entry
2. Аутентификация первый режим
JAAS Config:
AESLogin_AD2 {
com.sun.security.auth.module.LdapLoginModule REQUIRED
userProvider="ldap:///CN=Users,DC=rdl,DC=com,DC=tw"
authIdentity="{USERNAME}"
userFilter="(&(|(samAccountName={USERNAME})(userPrincipalName={USERNAME})(cn={USERNAME}))(objectClass=user))"
useSSL=false
debug=true;
};
Результат:
[LdapLoginModule] authentication-first mode; SSL disabled
[LdapLoginModule] user provider: ldap:///CN=Users,DC=rdl,DC=com,DC=tw
[LdapLoginModule] attempting to authenticate user: [email protected]
[LdapLoginModule] authentication failed
[LdapLoginModule] aborted authentication
javax.security.auth.login.FailedLoginException: Cannot bind to LDAP server
3. Аутентификация только режим
ПРИМЕЧАНИЕ: Я НЕ указано authzIdentity как я не, что установка на AD
JAAS Config:
AESLogin_AD3 {
com.sun.security.auth.module.LdapLoginModule REQUIRED
userProvider="ldap://192.168.0.81:389"
authIdentity="CN={USERNAME},CN=Users,DC=rdl,DC=com,DC=tw"
useSSL=false
debug=true;
};
Итог:
[LdapLoginModule] authentication-only mode; SSL disabled
[LdapLoginModule] user provider: ldap://192.168.0.81:389
[LdapLoginModule] attempting to authenticate user: [email protected]
[LdapLoginModule] authentication failed
[LdapLoginModule] aborted authentication
javax.security.auth.login.FailedLoginException: Cannot bind to LDAP server
Я также попробовал другую конфигурацию, основываясь на некоторых примерах, с которыми я столкнулся в Интернете:
4.Config из другого примера
JAAS Config:
AESLogin_AD4 {
com.sun.security.auth.module.LdapLoginModule REQUIRED
userProvider="ldap://192.168.0.81:389/CN=Users,DC=rdl,DC=com,DC=tw"
authIdentity="{USERNAME}"
useSSL=false
debug=true;
};
Результат:
[LdapLoginModule] authentication-only mode; SSL disabled
[LdapLoginModule] user provider: ldap://192.168.0.81:389/CN=Users,DC=rdl,DC=com,DC=tw
[LdapLoginModule] attempting to authenticate user: [email protected]
[LdapLoginModule] cannot create LdapPrincipal: bad DN
[LdapLoginModule] authentication failed
[LdapLoginModule] aborted authentication
javax.security.auth.login.FailedLoginException: Cannot create LdapPrincipal
Примечание: Моя четвертая проба, кажется, показывает незначительный прогресс, по крайней мере LDAP связывания, кажется, работа, но теперь вопросы, как представляется, являются cannot create LdapPrincipal: bad DN
Я пошел в исходный код для LdapLoginModule
и путем сопоставления сообщения отладки, кажется, это было вызвано (начиная с линии 837):
try {
ldapPrincipal = new LdapPrincipal(dn);
} catch (InvalidNameException e) {
if (debug) {
System.out.println("\t\t[LdapLoginModule] " +
"cannot create LdapPrincipal: bad DN");
}
throw (LoginException)
new FailedLoginException("Cannot create LdapPrincipal")
.initCause(e);
}
И на основе LdapPrincipal API, InvalidNameException
брошено Если нарушение синтаксиса обнаружено, но я не знаю, где нарушение синтаксиса.
Я также не знаю, как отладить это.
Любая помощь будет очень признательна! Благодаря!
'LdapPrincipal' ожидает [отличительное имя] (https: // tools.ietf.org/html/rfc4514), который «[email protected]» не является. В последнем примере, например (при условии, что конкретной учетной записи разрешено связываться с каталогом), попробуйте установить 'authIdentity' в' CN = {USERNAME}, CN = Пользователи, DC = rdl, DC = com, DC = tw' и войдите в систему как «[email protected]»; или оставить 'authIdentity' как есть и войти в систему как' CN = ahsieh @ rdl.com.tw, CN = Пользователи, DC = rdl, DC = com, DC = tw'. – Uux
Спасибо @Uux, к сожалению, оба ваших предложения приводят к 'javax.security.auth.login.FailedLoginException: не удается связать с сервером LDAP. Любые другие мысли о том, что я могу попробовать? Благодарю. – Arthur
Мое плохое, я не заметил, что 'userProvider' уже содержит базовое DN, поэтому его комбинация с моим предложенным значением' authIdentity', очевидно, относится к несуществующей записи ('CN = ahsieh @ rdl.com.tw, CN = Пользователи , DC = RDL, DC = ком, DC = застегивается, CN = Users, DC = RDL, DC = Com, DC = tw'). Еще одна ошибка в моем предположении заключалась в том, что 'ahsieh @ rdl.com.tw', вероятно (я не знаком с схемой Active Directory (ta)), атрибутом' userPrincipalName', а не 'CN'. Я больше не буду размышлять об этом, потому что вы, по-видимому, сами это поняли. – Uux