2020年4月23日木曜日

Gitlab で認証に Google OAuth2 を使ってみた

概要

Gitlab には Ruby の OmniAuth を使ったいろいろな認証連携をサポートしています
今回は Google OAuth2 と連携する方法を紹介したいと思います

環境

  • Ubuntu 16.04
    • GitLab Enterprise Edition 12.9.2-ee
  • Google OAuth2 (2020/04/17 時点)

Google OAuth2 ClientID と ClientSecret を取得する

Google Cloud Platform (GCP) に事前にプロジェクトを作成してある想定です
また OAuth2 のクライアントアプリケーションも作成済みを想定しています
まだの場合はこの辺りを参考に OAuth2 クライアントアプリの作成を行ってください

左メニューから「API サービス」->「認証情報」と進みます

そして右の方にある「クライアントID」と「クライアントシークレット」をメモしておきます

OAuth2 のリダイレクト URL を設定する

次に OAuth2 の認証後に Gitlab に戻ってくるリダイレクト URL を設定します
同じように「API サービス」->「認証情報」と進みます
そして一覧から先程「クライアントID」と「クライアントシークレット」を選択し下にある「URI」と「承認済みのリダイレクト URI」に以下を追加しましょう

このリダイレクト URI は Gitlab が指定する URI なので変更しないようにしましょう
またドメインの部分は自身の環境に合わせたドメインにしてください

external_url を設定する

過去の記事で Gitlab の初期化時に external_url は IP を指定していました
Google OAuth2 のリダイレクト URL には IP アドレスの指定はできないのでローカルで解決できるドメインに変更してあげましょう

  • vim /etc/gitlab/gitlab.rb
external_url 'http://gitlab.example.com'
  • gitlab-ctl reconfigure

そして Mac などのクライアント側に gitlab.example.com を解決する情報を /etc/hosts に追記します

  • sudo vim /etc/hosts
192.168.100.10  gitlab.example.com

gitlab.rb に omniauth_provider の設定を記載する

取得したクライアントID とクライアントシークレットを gitlab.rb に記載します
2 auth factor などを使っていない場合はそのまま同じ設定をすれば動作すると思います
app_id にクライアントID を app_secret にクライアントシークレットを記載します

  • vim /etc/gitlab/gitlab.rb
gitlab_rails['omniauth_enabled'] = true
gitlab_rails['omniauth_allow_single_sign_on'] = ['google_oauth2']
gitlab_rails['omniauth_sync_profile_from_provider'] = ['google_oauth2']
gitlab_rails['omniauth_block_auto_created_users'] = false
gitlab_rails['omniauth_providers'] = [
  {
    "name" => "google_oauth2",
    "app_id" => "00000000000-xxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com",
    "app_secret" => "xxxxxxxxxxxxxxxxxxxxxxxxxx",
    "args" => { "access_type" => "offline", "approval_prompt" => "" }
  }
]

omniauth_block_auto_created_users は今回 false にしています
これを false にすると Google OAuth2 で認証後すぐにアカウントが作成されすぐにログインできるようになります
true にしておくとアカウントは作成されるが Admin ユーザがログインを許可しない限りログインはできない状態となります (ブロック状態)
今回はテストなので false にしています

各種パラメータの説明などはこちらが参考になると思います
記載できたら reconfigure をかけましょう

  • gitlab-ctl reconfigure

動作確認

これで Gitlab にアクセスすると Google OAuth のアイコンが追加されています
クリックしてアカウントの作成とログインをしてみましょう

この画面に出てくる情報は GCP の「OAuth の同意画面」で編集できます
アイコンやホームページの情報など正確な情報を載せたい場合には審査が必要になります

これでアカウントの作成とログインができれば OK です
アイコンの情報は読み込まれないようで Gravator と連携するようなので必要であれば Gravator に登録したり自分で Gitlab にアイコンをアップロードしましょう

OAuth 後に以下の画面が出てうまくログインできない場合は gitlab.rb のパラメータの設定を確認してみてください

最後に

Gitlab で Google OAuth2 と連携してみました
今回はアカウントの作成後すぐにログインできるようにしていますが安全にするならブロックを true にしても良いかもしれません

他にも SAML や OpenID との連携もできるのですでに ID 管理している機構がありそれらのインタフェースを持っているなら簡単に連携可能です

Tips: Google アカウントが許可したアプリの一覧を確認するには

ここから Gitlab にログインするために許可したアプリが確認できます
テストなどでもう使わないのであれば権限を削除しておきましょう

参考サイト

0 件のコメント:

コメントを投稿