OAuth2.0認証プロバイダとしてShibbolethを使用します。

note
特定のShibbolethアイデンティティプロバイダ(IdP)を統合するには、GitLab SAMLインテグレーションを使用してください。Shibbolethのフェデレーションサポート(Discovery Service)については、このドキュメントを使用してください。

GitLabでShibbolethサポートを有効にするには、NGINXの代わりにApacheを使用してください。ApacheはShibboleth認証のためにmod_shib2 モジュールを使用し、OmniAuth Shibbolethプロバイダにヘッダとして属性を渡すことができます。

Linuxパッケージで提供されているバンドルNGINXを使用して、リバースプロキシのセットアップを使用して別のインスタンス上でShibbolethサービスプロバイダを実行することができます。しかし、これを行わない場合、バンドルされているNGINXの設定は困難です。

Shibboleth OmniAuthプロバイダを有効にするには、次のことが必要です:

Shibbolethを有効にします:

  1. OmniAuth ShibbolethコールバックURLを保護します:

    <Location /users/auth/shibboleth/callback>
      AuthType shibboleth
      ShibRequestSetting requireSession 1
      ShibUseHeaders On
      require valid-user
    </Location>
       
    Alias /shibboleth-sp /usr/share/shibboleth
    <Location /shibboleth-sp>
      Satisfy any
    </Location>
       
    <Location /Shibboleth.sso>
      SetHandler shib
    </Location>
    
  2. Shibboleth URLを書き換えから除外します。RewriteCond %{REQUEST_URI} !/Shibboleth.ssoRewriteCond %{REQUEST_URI} !/shibboleth-sp を追加します。設定例です:

    # Apache equivalent of Nginx try files
    RewriteEngine on
    RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !/Shibboleth.sso
    RewriteCond %{REQUEST_URI} !/shibboleth-sp
    RewriteRule .* http://127.0.0.1:8080%{REQUEST_URI} [P,QSA]
    RequestHeader set X_FORWARDED_PROTO 'https'
    
  3. OmniAuth プロバイダとして/etc/gitlab/gitlab.rb に Shibboleth を追加します。ユーザー属性は、ApacheリバースプロキシからGitLabに、Shibboleth属性マッピングからの名前を持つヘッダーとして送信されます。そのため、args ハッシュの値は"HTTP_ATTRIBUTE"の形式でなければなりません。ハッシュのキーはOmniAuth::Strategies::Shibboleth クラスの引数であり、omniauth-shibboleth-redux gem でドキュメント化されています(GitLab に同梱されている gem のバージョンに注意してください)。

    ファイルはこのようになります:

    external_url 'https://gitlab.example.com'
    gitlab_rails['internal_api_url'] = 'https://gitlab.example.com'
       
    # disable Nginx
    nginx['enable'] = false
       
    gitlab_rails['omniauth_allow_single_sign_on'] = true
    gitlab_rails['omniauth_block_auto_created_users'] = false
    gitlab_rails['omniauth_providers'] = [
      {
        "name"  => "shibboleth",
        "label" => "Text for Login Button",
        "args"  => {
            "shib_session_id_field"     => "HTTP_SHIB_SESSION_ID",
            "shib_application_id_field" => "HTTP_SHIB_APPLICATION_ID",
            "uid_field"                 => 'HTTP_EPPN',
            "name_field"                => 'HTTP_CN',
            "info_fields"               => { "email" => 'HTTP_MAIL'}
        }
      }
    ]
    

    ShibbolethとApacheによって認証されているように見えるユーザーがいるにもかかわらず、GitLabが “e-mail is invalid “を含むURIでそのアカウントを拒否する場合は、Shibbolethアイデンティティ・プロバイダまたは属性付与機関が複数のメールアドレスをアサートしている可能性があります。このインスタンスでは、multi_values 引数をfirst に設定することを検討してください。

  4. 変更を有効にするには

    • Linuxパッケージのインストールでは、GitLabを再設定してください。
    • セルフコンパイルインストールの場合は、GitLabを再起動してください。

サインインページで、通常のサインインフォームの下にSign in with:通常のサインインフォームの下にShibbolethアイコンがあるはずです。アイコンを選択して認証プロセスを開始します。Shibbolethモジュールの設定に適したIdPサーバーにリダイレクトされます。問題がなければ、GitLabに戻ってサインインします。