У меня успешно работает приложение Rails 3 с devise и devise_ldap_authenticatable для аутентификации в локальной Active Directory.
Теперь я хочу добавить полномочия , чтобы разрешить доступ только пользователям AD, которые принадлежат к определенным группам AD.
Итак, для начала я сначала нашел своего пользователя в AD с помощью команды linux ldapsearch. Результат содержал что-то вроде ...
(...)
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? Документация этого модуля еще не настолько исчерпывающая, когда дело доходит до авторизации.