Skip to content
Kosuke Tanabe edited this page Jun 19, 2022 · 10 revisions

LDAP認証

devise_ldap_authenticatable gemを用いたLDAP認証の設定方法です。

  1. Gemfileに以下の行を追加します。

    gem 'devise_ldap_authenticatable'
  2. gemのインストールを行います。

    bundle install
  3. Dockerイメージをビルドします。

    docker compose build
  4. LDAP認証の設定ファイルの作成を行います。

    rails g devise_ldap_authenticatable:install
  5. app/models/user.rbに、以下の行が含まれていることを確認します。

    devise :ldap_authenticatable,
  6. LDAPサーバのバインド情報を、config/ldap.ymlに追加します。

    production:
      host: localhost
      port: 389
      attribute: uid # ユーザ名に使用する属性
      base: ou=people,dc=test,dc=com
      admin_user: cn=admin,dc=test,dc=com
      admin_password: admin_password
      ssl: simple_tls
  7. サインイン時にアカウントを自動作成したい場合、config/initializers/devise.rbを以下のように変更します。

    Devise.setup do |config|
      # ==> LDAP Configuration
      # config.ldap_logger = true # 認証ログを出力する場合はこの行のコメントを解除
      config.ldap_create_user = true # コメント解除
      # config.ldap_update_password = true
  8. サインイン時にLDAPサーバからメールアドレスを取得して保存したい場合、ldap_before_saveメソッドをapp/models/user.rbに追加します。

    class User < ApplicationRecord
      # 中略
      def ldap_before_save
        # mail属性にメールアドレス、cn属性に氏名が保存されているものとする
        self.email = Devise::LDAP::Adapter.get_ldap_param(username, "mail").first
        return unless new_record?
    
        self.profile = Profile.new(
          required_role: Role.find_by(name: 'Librarian'),
          full_name: Devise::LDAP::Adapter.get_ldap_param(username, "cn").first,
          # 既定のuser_groupとlibraryは各自の環境にあわせて変更すること
          user_group: UserGroup.find_by(name: 'first_group'),
          library: Library.find_by(name: 'web'),
        )
        # 既定ではUser権限でユーザアカウントを作成
        self.role = Role.find_by(name: 'User')
    
        # その他、LDAPでのサインイン時に行いたい処理がある場合、このメソッド内に記述する
      end
    end
  9. アプリケーションを再起動します。

Clone this wiki locally