2013-06-11 2 views
1

ВОПРОС: Grails ADMIN регистрируется через LDAP, но никакой другой учетной записи нет. System = Win 7, grails 2.2.1, Active Dir lightGrails Spring Security & LDAP Auth Failure

Я создал простое приложение по умолчанию Грааля, установил новейшие функции безопасности весны Grails и ldap-плагины. Затем я выполнил следующий учебник, чтобы настроить настройку безопасности весны. Учебное пособие расположено на http://blog.springsource.com/2010/08/11/simplified-spring-security-with-grails/

В любом случае, весенняя безопасность работает довольно быстро, следующим шагом была настройка LDAP для использования анонимного авторизационного фильтра, чтобы мое приложение grails входило в систему, не проверяя собственную БД для паролей, только LDAP. Я использую Windows Active Directory. В любом случае, после этой настройки конфигурации http://grails-plugins.github.io/grails-spring-security-ldap/docs/manual/guide/2.%20Usage.html. Кажется, все начинается отлично, за исключением того, что единственный пользователь, который, похоже, правильно регистрируется, - это admin, другой пользователь не работает. Я не могу найти пользователя с этой ошибкой имени пользователя/пароля. Я добавил сообщение об ошибке, предупреждении и входе в журнал для весенней безопасности, но, похоже, не дает много информации, кроме собственно учетной записи администратора. Я подтвердил, что он работает, так как я дал пароль безопасности весны безопасности другого пароля для пароля ldap, и как только ldap был настроен, единственным паролем, который работал для администратора, был ldap. К сожалению, другие пользователи не работали.

Вот мой Grails конфигурации:

// 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' 


    grails.plugins.springsecurity.ldap.context.managerDn = 'CN=admin,OU=people,OU=imApp,DC=example,DC=org' 
    grails.plugins.springsecurity.ldap.context.managerPassword = 'password' 
    grails.plugins.springsecurity.ldap.context.server = 'ldap://localhost:55000/' 
    grails.plugins.springsecurity.ldap.authorities.ignorePartialResultException = true 
    grails.plugins.springsecurity.ldap.search.base = 'OU=people,OU=imApp,DC=example,DC=org' 
    grails.plugins.springsecurity.ldap.search.filter='uid={0}' //ad use sAMAccountName instead of uid 
    grails.plugins.springsecurity.ldap.search.searchSubtree =true 
    grails.plugins.springsecurity.ldap.auth.hideUserNotFoundExceptions= false 
    grails.plugins.springsecurity.ldap.search.derefLink = true 
    // specify this when you want to skip attempting to load from db and only use LDAP 
    grails.plugins.springsecurity.providerNames = ['ldapAuthProvider', 'anonymousAuthenticationProvider'] 
    grails.plugins.springsecurity.conf.ldap.authorities.retrieveGroupRoles = false 
    grails.plugins.springsecurity.conf.ldap.authorities.retrieveDatabaseRoles = false 
    //grails.plugins.springsecurity.ldap.authorities.groupSearchBase = 'ou=groups,ou=imApp,dc=mcommunity,dc=org' 
    //role specific ldap config 
    grails.plugins.springsecurity.ldap.useRememberMe = false 

Я попробовал несколько вариантов этой конфигурации, например, он говорит Активный Dir требует SamAccountName как search.filter, но когда я использую это никаких счетов не работать, если Я прокомментирую его полностью, он работает как уже memntioned, admin logs in, но никакой другой учетной записи. Если я удалю springsecurity.providerNames, приложение запустится, но использует DB в качестве провайдера паролей auth. Я наткнулся на некоторые блоги, которые упомянули об удалении пароля для класса модели и db, или сделав его нулевым, что я пытался, но не повлиял на результат.

Моя активная структура Dir выглядит следующим образом:

DC=example,dc=org 
     OU=imApp 
     OU=groups 
     OU=people 
      CN=admin user CN=admin,OU=people,OU=imApp,DC=example,DC=org 
      CN=user1 user CN=user1,OU=people,OU=imApp,DC=example,DC=org 
    CN=LostAndFound 
    CN= NTDS Quotas 
    CN=Roles 

Я дал каждому счету пароль LDAP, и добавил параметр UID соответствия, что их имя пользователя (CN). Я не использовал пользовательский UserDetailsContextMapper, просто по умолчанию. Тем не менее, я попробовал Custom UserDetailsContextMapper и просто столкнулся с той же проблемой, поэтому вернулся к использованию только стандартного. Также я заметил, что Active Dir имеет нижний регистр dc для org, поэтому я попытался использовать тот же самый нижний регистр dc в конфигурации Grails, но имеет тот же результат.

Неужели кто-нибудь сталкивался с этой проблемой или знал, где я могу идти? Любая помощь оценивается.

Бест, Marklw16

+0

Если вы использовали пользовательские 'UserDetailsContextMapper' и не работает, вероятно, вы будете искать, что это неправильно. Возможно [эта тема] (http://stackoverflow.com/questions/4157201/finding-cn-of-users-in-active-directory) помогает вам. –

+0

Спасибо Sérgio, прочитал эту тему и попробовал несколько других идей, но до сих пор не работал. Я думал, возможно, добавит параметр CN = пользователей в папку сотрудников OU. Затем я изменил ldap.search.base = 'CN = users, OU = people, OU = imApp, DC = example, DC = org', так как тогда он будет похож на синтаксис managerDn, который работает, но пока нет радости – marklw16

ответ

0

Попробуйте следующие настройки:

grails.plugins.springsecurity.ldap.authorities.groupSearchBase ='DC=example,dc=org' 
grails.plugins.springsecurity.ldap.authorities.groupSearchFilter = 'member={0}' 
+0

Спасибо Джеймс, я попробовал ваше предложение конфигурации. Хотя это не сработало, оно, тем не менее, немного улучшилось. Теперь я вижу в журналах, что он пытается что-то сделать. Я попробовал несколько вариантов конфигурации, которую вы предложили, например, измените член на uid, capitals DC, добавив OU = people, OU = imApp. Кажется, дает тот же результат.Id сказать, что так близко, просто что-то маленькое, которого я не хватает. – marklw16

+0

Вывод журналов - Запрос на проверку подлинности пользователя: user1 Поиск пользователя 'user1', с поиском пользователя [searchFilter: 'uid = {0}', searchBase: 'OU = people, OU = imApp, DC = example, DC = org ', scope: поддерево, searchTimeLimit: 0, derefLinkFlag: true] Поиск записи под DN' ', base =' ou = people, ou = imApp, dc = example, dc = org ', filter =' uid = { 0} ' Найдено DN: cn = user1, ou = people, ou = imApp, dc = example, dc = org Попытка связывания как cn = user1, ou = people, ou = imApp, dc = example, dc = org Удаление флага объединения для пользователя cn = user1, ou = people, ou = imApp, dc = example, dc = org Извлечение атрибутов попытка входа не удалась – marklw16

Смежные вопросы