以前、ErrbitをLDAP連携してログインできるようにする で、LDAPアカウントでErrbitにログインする方法を紹介しました。
今回はActive Directoryと連携してログインする方法を紹介します。手順はLDAPのとほぼ同じです。
USER_HAS_USERNAME
をtrue
に変更します。
# .env
ERRBIT_USER_HAS_USERNAME=true
Devise LDAP Authenticatable
というgemをインストールします。
# Gemfile
gem "devise"
gem "devise_ldap_authenticatable", :git => "git://github.com/cschiewek/devise_ldap_authenticatable.git"
$ bundle install --path=vendor/bundle
$ bundle exec script/rails generate devise_ldap_authenticatable:install
create config/ldap.yml
insert config/initializers/devise.rb
gsub app/models/user.rb
insert app/controllers/application_controller.rb
config/initializers/devise.rb
を編集します。
Devise.setup do |config|
config.ldap_logger = true
config.ldap_create_user = true
config.ldap_use_admin_to_bind = true
...
end
config/initializers/devise_ldap.rb
を作成します。
Errbit::Config.devise_modules << :ldap_authenticatable
app/models/user.rb
に ldap_before_save
メソッドを追加します。publicで定義する必要があるので、privateより上で定義します。
Errbitログイン時に名前とEmail、タイムゾーンを設定するようにしています。
def ldap_before_save
name = Devise::LDAP::Adapter.get_ldap_param(self.username, "cn")
self.name = name.first
self.email = self.name + "@foo.com"
self.time_zone = "Tokyo"
self.admin = true
end
private
...
config/ldap.yml
を編集してActive Directoryドメインコントローラーへの接続を設定します。
admin_user
と admin_password
は ""
で括る必要があるとのことです。
production:
host: [ドメインコントローラーのIPアドレス]
port: 389
attribute: sAMAccountName
base: ou=xxx,dc=xxx,dc=xxxx
admin_user: [管理者ユーザ名]
admin_password: [管理者パスワード]
ssl: false
# <<: *AUTHORIZATIONS
Errbitを再起動します。Unicornで起動している場合はkillします。
$ sudo kill -QUIT $(cat tmp/unicorn.pid)
起動完了したら、Errbitにアクセスして、ユーザ名(メールアドレスではない方)とパスワードを入力すれば、Errbitにユーザ登録されるはずです。
何かエラーがでたら、Railsのログを見て対応します。