2023年3月6日月曜日

Gitlab と AzureAD の OpenIDConnect で認証連携する方法

Gitlab と AzureAD の OpenIDConnect で認証連携する方法

概要

前回 AzureAD + SAML 認証を紹介しました
今回は AzureAD + OpenIDConnect の連携方法を紹介します

環境

  • Gitlab 15.6.8-ee
  • AzureAD (2023/03/02 時点)

アプリケーションの登録

まずは Azure AD にアプリケーションを登録します

ディレクトリのトップ画面に移動します

そして左メニューから「アプリの登録」を選択し「新規登録」します

アプリの名称を入力します
そして重要なリダイレクトURIを入力します
リダイレクト URI「Web」を選択し Gitlab の URL + /users/auth/openid_connect/callback を入力します

エンドポイントとクライアントIDの確認

アプリケーションが作成できたら「エンドポイント」を選択し OpenIDConnect 用のエンドポイントを確認します

またアプリケーションの詳細画面に「アプリケーション(クライアントID)」があるのでこれもメモしておきます

シークレットの作成

次にシークレット情報を作成します
左メニューの「証明書とシークレット」を選択し「新しいクライアントシークレット」を選択します

説明とシークレットの有効期限を設定しましょう
シークレットの有効期限は無限にはできないですが日付指定はできるのでそれを使って期間を延長しましょう

使用するのはシークレットIDではなく値の方になります

その他

  • アプリケーションへのユーザの登録は必要に応じて行う
  • トークン構成から email 情報を追加する必要はなさそう

gitlab.rb の編集

作成したアプリケーションの情報を展開します
編集する箇所は以下の通りです

  • issuer・・・アプリケーションのエンドポイントで確認した OpenIDConnect 用の URL を記載
  • client_options.identifier・・・アプリケーションのクライアントIDを記載
  • client_options.secret・・・アプリケーションに作成したシークレットの値情報を記載
  • client_options.redirect_uri・・・アプリケーション作成時に登録したリダイレクトURIを記載
gitlab_rails['omniauth_allow_single_sign_on'] = ['openid_connect']
gitlab_rails['omniauth_block_auto_created_users'] = false
gitlab_rails['omniauth_auto_link_saml_user'] = false
gitlab_rails['omniauth_providers'] = [
  {
    name: "openid_connect",
    label: "Azure OIDC",
    args: {
      name: "openid_connect",
      scope: ["openid", "profile", "email"],
      response_type: "code",
      issuer:  "https://login.microsoftonline.com/xxxxxxxxxxxx/v2.0",
      client_auth_method: "query",
      discovery: true,
      uid_field: "preferred_username",
      pkce: true,
      client_options: {
        identifier: "xxxxxxxxxxxx",
        secret: "xxxxxxxxxxx",
        redirect_uri: "https://your.gitlab.com/users/auth/openid_connect/callback"
      }
    }
  },
]

動作確認

あとは reconfigure してログインページから Azure OIDC でログインできるか確認しましょう

初回アクセス時にはアプリケーションからのアクセス許可が必要なので許可しましょう

最後に

Gitlab + AzureAD + OpenIDConnect の連携方法を紹介しました
Gitlab と AzureAD の認証連携をする場合には SAML or OpenIDConnect を選択できます
基本は SAML で OK ですが用途に合わせては OpenIDConnect を使うのもありかなと思います

この辺りの認証情報の取捨選択は環境に合わせて選択する必要があります

参考サイト

0 件のコメント:

コメントを投稿