У меня успешно работает приложение Rails 3 с devise и devise_ldap_authenticatable для проверки подлинности в локальной Active Directory.
Теперь я хочу добавить возможности авторизации, чтобы разрешить доступ только к пользователям AD, принадлежащим определенным группам AD.
Итак, чтобы начать просто, я сначала искал своего собственного пользователя в AD с помощью команды ldapsearch linux. Результат содержал что-то вроде...
(...)
memberOf: CN=my,OU=foo,DC=bar,DC=role,DC=domain,DC=com
memberOf: CN=my,OU=foo,DC=bar2,DC=role,DC=domain,DC=com
memberOf: (...)
(...)
Хорошо, теперь я решил, что хочу ограничить доступ к членам CN=my,OU=foo,DC=bar,DC=role,DC=domain,DC=com.
Итак, я изменил свой ldap.yml, чтобы он содержал:
authorizations: &AUTHORIZATIONS
group_base: ou=role,dc=domain,dc=com
required_groups:
- CN=my,OU=foo,DC=bar,DC=role,DC=domain,DC=com
development:
(...)
<<: *AUTHORIZATIONS
И кроме того изменил мой devise.rb, чтобы он содержал:
Devise.setup do |config|
config.ldap_logger = true
config.ldap_create_user = true
config.ldap_update_password = false
config.ldap_check_group_membership = true # <-- activated this line
config.ldap_use_admin_to_bind = true
#config.ldap_ad_group_check = true <-- don't know what this is good for
Теперь при попытке аутентификации доступ запрещен, чего я не ожидал:
User CN=myuser,OU=org,DC=domain,DC=com is not in group: CN=my,OU=foo,DC=bar,DC=role,DC=domain,DC=com
Любая идея, как авторизация против AD выполняется с помощью devise_ldap_authenticatable? Документация этого модуля еще не является исчерпывающей, когда дело доходит до авторизации.