本日も乙

ただの自己満足な備忘録。

ErrbitをActive Directoryと連携してログインできるようにする

以前、ErrbitをLDAP連携してログインできるようにする で、LDAPアカウントでErrbitにログインする方法を紹介しました。

blog.jicoman.info

今回はActive Directoryと連携してログインする方法を紹介します。手順はLDAPのとほぼ同じです。

USER_HAS_USERNAMEtrueに変更します。

# .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.rbldap_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_useradmin_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のログを見て対応します。

参考URL