Ошибка аутентификации Grails Spring LDAP
Я пытаюсь заставить работать Grails Spring ldap. Независимо от того, что я пытаюсь, я не могу выполнить аутентификацию. Я не уверен, что вызывает мою ошибку. Вот мой конфиг:
grails.plugin.springsecurity.ldap.context.managerDn = 'cn=root'
grails.plugin.springsecurity.ldap.context.managerPassword = '<value>'
grails.plugin.springsecurity.ldap.context.server = 'ldap://myserver.com:389'
grails.plugin.springsecurity.ldap.authorities.ignorePartialResultException = true
grails.plugin.springsecurity.ldap.search.base ='o=<value>,c=<value'
grails.plugin.springsecurity.ldap.search.filter = 'sAMAccountName={0}'
grails.plugin.springsecurity.ldap.search.searchSubtree = true
//grails.plugin.springsecurity.password.algorithm = 'SHA-1'
//grails.plugins.springsecurity.ldap.search.derefLink = true
grails.plugin.springsecurity.ldap.auth.hideUserNotFoundExceptions = false
//grails.plugin.springsecurity.ldap.mapper.userDetailsClass = 'person'
//grails.plugin.springsecurity.ldap.search.attributesToReturn = ['cn', 'displayName'] // extra attributes you want returned
grails.plugin.springsecurity.providerNames = ['ldapAuthProvider', 'anonymousAuthenticationProvider']
// role-specific LDAP config
//grails.plugin.springsecurity.ldap.useRememberMe = false
//grails.plugin.springsecurity.ldap.authorities.retrieveGroupRoles = true
//grails.plugin.springsecurity.ldap.authorities.retrieveDatabaseRoles = false
//grails.plugin.springsecurity.ldap.authenticator.useBind = true
grails.plugin.springsecurity.ldap.authorities.groupSearchBase='cn=myUser'
grails.plugin.springsecurity.ldap.authorities.groupSearchFilter = 'member={0}'
Журналы:
2014-04-30 10:24:52,374 [http-bio-8099-exec-8] DEBUG authentication.ProviderManager - Authentication attempt using org.springframework.security.ldap.authentication.LdapAuthenticationProvider
2014-04-30 10:24:52,418 [http-bio-8099-exec-8] DEBUG authentication.LdapAuthenticationProvider - Processing authentication request for user: cn=<userid> 2014-04-30 10:24:52,418
[http-bio-8099-exec-8] DEBUG search.FilterBasedLdapUserSearch - Searching for user 'cn= <userid>', with user search [ searchFilter: '(uid={0})', searchBase: 'o=<value>,c=<value>', scope: subtree, searchTimeLimit: 0, derefLinkFlag: false ]
2014-04-30 10:24:52,422 [http-bio-8099-exec-8] DEBUG ldap.SpringSecurityLdapTemplate - Searching for entry under DN '', base = 'o=<value>,c=<value>', filter = '(uid={0})'
2014-04-30 10:24:52,422 [http-bio-8099-exec-8] DEBUG rememberme.TokenBasedRememberMeServices - Interactive login attempt was unsuccessful.
2014-04-30 10:24:52,423 [http-bio-8099-exec-8] DEBUG rememberme.TokenBasedRememberMeServices - Cancelling cookie 2014-04-30 10:24:52,423
[http-bio-8099-exec-8] DEBUG web.DefaultRedirectStrategy - Redirecting to '/LDAPTest1/login/authfail?login_error=1'
пожалуйста, порекомендуйте
Java-код: `
public static String INITCTX = "com.sun.jndi.ldap.LdapCtxFactory";
public static String MY_HOST = "ldap://myserver:389";
public static String MY_SEARCHBASE = "o=<value>,c=<value>";
public static String MY_FILTER = "cn=<userid>";
public static String MGR_DN = "cn=root";
public static String MGR_PW = "<pwd>";
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,INITCTX);
env.put(Context.PROVIDER_URL,MY_HOST);
env.put(Context.SECURITY_AUTHENTICATION,"simple");
env.put(Context.SECURITY_PRINCIPAL,MGR_DN);
env.put(Context.SECURITY_CREDENTIALS,MGR_PW);
DirContext ctx = new InitialDirContext(env);
SearchControls constraints = new SearchControls();
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
//performs the actual search
//We give it a searchbase, a filter and the contraints containing the scope
//of the search
NamingEnumeration results = ctx.search(MY_SEARCHBASE,MY_FILTER,constraints);
`
1 ответ
Итак, у другого пользователя была похожая проблема.
Похоже, что основные ценности, которые он изменил, также отличаются от ваших
grails.plugins.springsecurity.conf.ldap.authorities.retrieveGroupRoles = false
Кроме того, ваша groupSearchBase должна быть группами, а не конкретным пользователем. Так что вместо
grails.plugin.springsecurity.ldap.authorities.groupSearchBase='cn=myUser'
Наверное, должно быть больше похоже
grails.plugins.springsecurity.ldap.authorities.groupSearchBase ='DC=Group,DC=com'
Также кажется, что вы используете другой фильтр поиска в вашем рабочем Java-коде, чем в вашей конфигурации Grails. Ваш код Java имеет фильтр "cn=<userid>"
, но ваша конфигурация Grails использует 'sAMAccountName={0}'. Я думаю, что sAMAccountName предпочитается системами Microsoft Active Directory, но ваш сервер LDAP может отличаться.
Еще одна вещь, которую нужно проверить: есть также некоторые вещи, которые необходимо настроить для Spring Security Core. Вот пример по ссылке выше:
// Added by the Spring Security Core plugin:
grails.plugins.springsecurity.userLookup.userDomainClassName = 'org.example.SecUser'
grails.plugins.springsecurity.userLookup.authorityJoinClassName = 'org.example.SecUserSecRole'
grails.plugins.springsecurity.authority.className = 'org.example.SecRole'
Если вы не совсем уверены, какие значения использовать для этих настроек, ознакомьтесь с документацией по плагину Spring Security. Есть несколько обязательных классов доменов, которые вам нужно настроить. http://grails-plugins.github.io/grails-spring-security-core/docs/manual/