OAuth2.0認証プロバイダとしてGeneric OAuth2 gemを使用します。
omniauth-oauth2-generic
gemは、GitLabとあなたのOAuth 2.0プロバイダ、またはこのgemと互換性のあるOAuth 2.0プロバイダとの間のシングルサインオン(SSO) を可能にします。
この戦略では、この OmniAuth SSO プロセスの設定を行います:
- ストラテジーは指定された ID とキーでクライアントを作成者の認証 URL(設定可能) に誘導します。
- OAuth 2.0 プロバイダは、リクエスト、ユーザー、そして (オプションで) ユーザーのプロファイルにアクセスするための認証の作成者を処理します。
- OAuth 2.0 プロバイダはクライアントを GitLab に戻し、Strategy がアクセストークンを取得します。
- Strategy はアクセストークンを使って設定可能な“user profile” URL からユーザー情報を要求します。
- ストラテジーは設定可能なフォーマットを使ってレスポンスからユーザー情報を解析します。
- GitLabは返されたユーザーを見つけるか作成し、サインインします。
この戦略は
- シングルサインオンのためにのみ使用でき、OAuth 2.0 プロバイダによって許可された他のアクセスは提供しません。例えば、プロジェクトやユーザーのインポートなどです。
- GitLabのようなクライアントサーバーアプリケーションで最も一般的な、作成者許可フローのみをサポートします。
- 複数の URL からユーザー情報を取得することはできません。
- JSON以外のユーザー情報フォーマットではテストされていません。
OAuth 2.0 プロバイダの設定
プロバイダを設定します:
-
認証したい OAuth 2.0 プロバイダにアプリケーションを登録します。
アプリケーションの登録時に指定するリダイレクトURIは、以下のようにします:
http://your-gitlab.host.com/users/auth/oauth2_generic/callback
これで、クライアントIDとクライアントシークレットを取得できるはずです。クライアント ID とクライアント・シークレットを取得できるはずです。これはアプリケーションIDとアプリケーションシークレットとも呼ばれます。
-
GitLab サーバー上で、以下の手順を実行します。
Linux package (Omnibus)-
共通設定を構成して、シングルサインオンプロバイダとして
oauth2_generic
。これにより、既存のGitLabアカウントを持っていないユーザーのためのJust-In-Timeアカウントプロビジョニングが可能になります。 -
/etc/gitlab/gitlab.rb
を編集して、プロバイダの設定を追加します。例えばgitlab_rails['omniauth_providers'] = [ { name: "oauth2_generic", label: "Provider name", # optional label for login button, defaults to "Oauth2 Generic" app_id: "<your_app_client_id>", app_secret: "<your_app_client_secret>", args: { client_options: { site: "<your_auth_server_url>", user_info_url: "/oauth2/v1/userinfo", authorize_url: "/oauth2/v1/authorize", token_url: "/oauth2/v1/token" }, user_response_structure: { root_path: [], id_path: ["sub"], attributes: { email: "email", name: "name" } }, authorize_params: { scope: "openid profile email" }, strategy_class: "OmniAuth::Strategies::OAuth2Generic" } } ]
-
ファイルを保存して GitLab を再設定してください:
sudo gitlab-ctl reconfigure
Helm chart (Kubernetes)-
共通設定を構成して、シングルサインオンプロバイダとして
oauth2_generic
。これにより、既存のGitLabアカウントを持っていないユーザーのためのJust-In-Timeアカウントプロビジョニングが可能になります。 -
Helm の値をエクスポートします:
helm get values gitlab > gitlab_values.yaml
-
Kubernetesシークレットとして使用するために、以下の内容を
oauth2_generic.yaml
という名前のファイルに入れます:name: "oauth2_generic" label: "Provider name" # optional label for login button defaults to "Oauth2 Generic" app_id: "<your_app_client_id>" app_secret: "<your_app_client_secret>" args: client_options: site: "<your_auth_server_url>" user_info_url: "/oauth2/v1/userinfo" authorize_url: "/oauth2/v1/authorize" token_url: "/oauth2/v1/token" user_response_structure: root_path: [] id_path: ["sub"] attributes: email: "email" name: "name" authorize_params: scope: "openid profile email" strategy_class: "OmniAuth::Strategies::OAuth2Generic"
-
Kubernetesシークレットを作成します:
kubectl create secret generic -n <namespace> gitlab-oauth2-generic --from-file=provider=oauth2_generic.yaml
-
gitlab_values.yaml
を編集し、プロバイダ設定を追加します:global: appConfig: omniauth: providers: - secret: gitlab-oauth2-generic
-
ファイルを保存して、新しい値を適用します:
helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
Self-compiled (source)-
共通設定を構成して、シングルサインオンプロバイダとして
oauth2_generic
。これにより、既存のGitLabアカウントを持っていないユーザーのためのJust-In-Timeアカウントプロビジョニングが可能になります。 -
/home/git/gitlab/config/gitlab.yml
を編集します:production: &base omniauth: providers: - { name: "oauth2_generic", label: "Provider name", # optional label for login button, defaults to "Oauth2 Generic" app_id: "<your_app_client_id>", app_secret: "<your_app_client_secret>", args: { client_options: { site: "<your_auth_server_url>", user_info_url: "/oauth2/v1/userinfo", authorize_url: "/oauth2/v1/authorize", token_url: "/oauth2/v1/token" }, user_response_structure: { root_path: [], id_path: ["sub"], attributes: { email: "email", name: "name" } }, authorize_params: { scope: "openid profile email" }, strategy_class: "OmniAuth::Strategies::OAuth2Generic" } }
-
ファイルを保存して GitLab を再起動します:
# For systems running systemd sudo systemctl restart gitlab.target # For systems running SysV init sudo service gitlab restart
-
共通設定を構成して、シングルサインオンプロバイダとして
サインインページでは、通常のサインインフォームの下に新しいアイコンが表示されているはずです。そのアイコンを選択すると、プロバイダの認証プロセスが始まります。これでブラウザが OAuth 2.0 プロバイダの認証ページに移動します。すべてがうまくいけば、GitLab インスタンスに戻り、サインインします。