Precondition
- GitLab の version は 13.12 とする
- GitLab endpoint は
https://gitlab.***.com
とする
Okta application の作成
SAML Settings を次の内容で設定する.
- General
- Single sign on URL: https://gitlab.***.com/users/auth/saml/callback
- Recipient URL: https://gitlab.***.com/users/auth/saml/callback
- Destination URL: https://gitlab.***.com/users/auth/saml/callback
- Audience Restriction https://gitlab.***.com
- Name ID Format: Transient
- Response: Signed
- Assertion Signature: Signed
- Signature Algorithm RSA_SHA256
- Digest Algorithm: SHA256
- SAML Issuer ID: http://www.okta.com/${org.externalKey}
- Attribute Statements
- Name: Emailaddress
- Name Format: Unspecified
- Value user.email
Work Procedure
Okta menu > Admin > Applications > GitLab > Sign On > View Setup Instructions
にて Okta の各種 parameter をメモする.
- Single Sign-On URL
- Identity Provider Issuer
- X.509 Certificate (file download も可)
- IDP metadata > md:NameIDFormat
X.509 Certificate の cert file から、証明書の Fingerprint を確認する.
$ openssl x509 -in okta.cert -noout -sha256 -fingerprint
GitLab server の /etc/gitlab/gitlab.rb
へ以下の値を追記する.
gitlab_rails['omniauth_allow_single_sign_on'] = ['saml'] gitlab_rails['omniauth_block_auto_created_users'] = true # 新規に作成されるユーザーをブロックする gitlab_rails['omniauth_auto_link_saml_user'] = true gitlab_rails['omniauth_providers'] = [ { name: 'saml', args: { assertion_consumer_service_url: 'https://gitlab.***.com/users/auth/saml/callback', idp_cert_fingerprint: '**:**...', idp_sso_target_url: 'https://**.okta.com/app/**/.../sso/saml', issuer: 'https://gitlab.***.com', name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:transient', attribute_statements: { email: ['EmailAddress'] } }, label: 'Okta' # optional label for SAML login button, defaults to "Saml" } ]
上記設定の変更を反映する。
$ gitlab-ctl reconfigure
Okta SAML 認証経由でログイン出来ることを確認する.
GitLab 管理画面にて Admin > Settings > General
で、password 認証を無効化する (web interface のみ影響).
Okta / GitLab parameter の詳細
Okta, GitLab で共通の parameter があるが、名称が異なったりして分かり辛い.
Okta param | GitLab param | Value | Desc |
---|---|---|---|
Single Sign on URL | assertion_consumer_service_url | https://gitlab.***.com/users/auth/saml/callback | SP (Service Provider, ここでは GitLab) の ACS (Assertion Consumer Service) |
Identity Provider Single Sign-On URL | idp_sso_target_url | https://.okta.com/app//***/sso/saml | |
Audience URI (SP Entity ID),Identity Provider Issuer | issuer | https://gitlab.***.com | GitLab が ID プロバイダに対して自身を識別する方法。Relying party trust identifier とも呼ばれる。 |
IDP metadata > md:NameIDFormat | name_identifier_format | urn:oasis:names:tc:SAML:2.0:nameid-format:transient | ユーザー識別子の format |
Attribute Statements | attribute_statements | Okta EmailAddress: user.email, GitLab attribute_statements: { email: ['EmailAddress'] } |