OAuth2.0認証プロバイダとしてShibbolethを使用します。
GitLabでShibbolethサポートを有効にするには、NGINXの代わりにApacheを使用してください。ApacheはShibboleth認証のためにmod_shib2
モジュールを使用し、OmniAuth Shibbolethプロバイダにヘッダとして属性を渡すことができます。
Linuxパッケージで提供されているバンドルNGINXを使用して、リバースプロキシのセットアップを使用して別のインスタンス上でShibbolethサービスプロバイダを実行することができます。しかし、これを行わない場合、バンドルされているNGINXの設定は困難です。
Shibboleth OmniAuthプロバイダを有効にするには、次のことが必要です:
- Apache モジュールをインストールします。
- Apache モジュールを設定します。
Shibbolethを有効にします:
-
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>
-
Shibboleth URLを書き換えから除外します。
RewriteCond %{REQUEST_URI} !/Shibboleth.sso
とRewriteCond %{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'
-
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
に設定することを検討してください。 -
変更を有効にするには
サインインページで、通常のサインインフォームの下にSign in with:通常のサインインフォームの下にShibbolethアイコンがあるはずです。アイコンを選択して認証プロセスを開始します。Shibbolethモジュールの設定に適したIdPサーバーにリダイレクトされます。問題がなければ、GitLabに戻ってサインインします。