プログラムを中心とした個人的なメモ用のブログです。 タイトルは迷走中。
内容の保証はできませんのであしからずご了承ください。

2017/11/11

GitLab で LDAP 認証するとメールアドレスが勝手に設定されるのを直す

event_note2017/11/11 11:39

GitLab で LDAP 認証を行う場合、メールアドレスが設定されていないと GitLab 側で勝手にメールアドレスが設定されてしまいます。

きちんとしたメールアドレスが設定されていれば良いのですが、私の会社では Active Directory にメールアドレスが設定されていないので、ドメインを使用したメールアドレスが勝手に設定されます。

一応管理者画面で後から変更できますが、ログインする度に都度上書きされてしまうので、意味がありません。

これを直すには GitLab のソースコードを修正する必要があります。

こちらのサンプルコードを参考に local.rb というファイルを作成します。

module OmniAuth
  module Strategies
    class LDAP
      class << self
        alias_method :map_user_orig, :map_user
      end

      def self.map_user(mapper, object)
        object['mail'] += ["#{object['sAMAccountName'].first}@example.com"]
        self.map_user_orig(mapper, object)
      end
    end
  end
end

私の環境では sAMAccountName を Username としているので、サンプルコードで uid だった箇所を sAMAccountName に変更しています。

このファイルを /opt/gitlab/embedded/service/gitlab-rails/config/initializers/ に配置します。

これで、LDAP 認証を行った際に上記で指定したメールアドレスが設定されるようになります。

それにしても、LDAP 認証時にメールアドレスが設定されていなかったら任意のメールアドレスを設定出来るようにとかならないんでしょうかね。
Redmine は確かそんな動作だったと思います。
普通に困ると思うのですが・・・。

Username とメールアドレスの@より前が異なる場合

上記は、Username と メールアドレスの @ より前の部分が同じであるという条件が付きます。
これらが異なる場合は、そのユーザーアカウントに対してメールアドレスを2つ設定する必要があります。

例えば、Username が hoge で、メールアドレスが piyo@example.com というような場合です。

この場合、LDAP 認証でログインしたときに hoge@example.com というメールアドレスが登録されますが、これはログイン用のダミーとして残しておき、実際に通知などで使用するメールアドレスとして piyo@example.com をユーザーアカウントに追加登録します。
Git のコミットログなどではメールアドレスをキーにしてユーザーを関連付けますが、GitLab 上では、メールアドレスを複数登録した場合はその両方がユーザーの判別に使用されるようです。
詳細は GitLab のメールアドレスの追加ページに書いてあります。

参考 URL