- OpenID Connectプロトコルへのマイグレーション
- Azure アプリケーションの登録
- API権限(スコープ)の追加
- GitLab で Microsoft OAuth を有効にします。
- トラブルシューティング
OAuth 2.0認証プロバイダとしてMicrosoft Azureを使用します。
Microsoft Azure OAuth 2.0 OmniAuthプロバイダを有効にして、Microsoft Azureの認証情報でGitLabにサインインすることができます。以前のAzure Active Directory v1.0エンドポイントを使用するプロバイダ、またはv2.0エンドポイントを使用するプロバイダを設定できます。
OpenID Connectプロトコルへのマイグレーション
OpenID Connectプロトコルにマイグレーションするには、複数のOpenID Connectプロバイダーの設定を参照してください。
プロバイダによって異なるuid_field
を設定する必要があります:
プロバイダー | uid | 備考 |
---|---|---|
omniauth-azure-oauth2 | sub | 追加属性oid ,tid は情報オブジェクト内部で提供されます。 |
omniauth-azure-activedirectory-v2 | oid | マイグレーション時には、oid をuid_field として設定する必要があります。 |
omniauth_openid_connect | sub | 別のフィールドを使用する場合はuid_field を指定してください。 |
omniauth-azure-oauth2
からomniauth_openid_connect
にマイグレーションするには、設定を変更する必要があります。
既存の設定の一部を削除し、図のように新しい設定を追加します。
gitlab_rails['omniauth_providers'] = [
{
name: "azure_oauth2",
# label: "Provider name", # optional label for login button, defaults to "Azure AD"
args: {
+ name: "azure_oauth2",
+ strategy_class: "OmniAuth::Strategies::OpenIDConnect",
+ scope: ["openid", "profile", "email"],
+ response_type: "code",
+ issuer: "https://login.microsoftonline.com/<tenant_id>/v2.0",
+ client_auth_method: "query",
+ discovery: true,
+ uid_field: "sub",
+ client_options: {
+ identifier: "<client_id>",
+ secret: "<client_secret>",
+ redirect_uri: "https://gitlab.example.com/users/auth/azure_oauth2/callback"
+ }
- client_id: "<client_id>",
- client_secret: "<client_secret>",
- tenant_id: "<tenant_id>",
}
}
]
既存の設定の一部を削除し、図のように新しい設定を追加します。
- { name: 'azure_oauth2',
# label: 'Provider name', # optional label for login button, defaults to "Azure AD"
- args: { client_id: '<client_id>',
- client_secret: '<client_secret>',
- tenant_id: '<tenant_id>' } }
+ icon: "<custom_provider_icon>",
+ args: {
+ name: "azure_oauth2",
+ strategy_class: "OmniAuth::Strategies::OpenIDConnect",
+ scope: ["openid","profile","email"],
+ response_type: "code",
+ issuer: 'https://login.microsoftonline.com/<tenant_id>/v2.0',
+ discovery: true,
+ client_auth_method: 'query',
+ uid_field: 'sub',
+ send_scope_to_token_endpoint: "false",
+ client_options: {
+ identifier: "<client_id>",
+ secret: "<client_secret>",
+ redirect_uri: "<your_gitlab_url>/users/auth/azure_oauth2/callback"
+ }
+ }
}
例えば、omniauth-azure-activedirectory-v2
からomniauth_openid_connect
にマイグレーションするには、設定を変更する必要があります。
既存の設定の一部を削除し、図のように新しい設定を追加します。
gitlab_rails['omniauth_providers'] = [
{
- name: "azure_activedirectory_v2",
# label: "Provider name", # optional label for login button, defaults to "Azure AD v2"
args: {
+ name: "azure_activedirectory_v2",
+ strategy_class: "OmniAuth::Strategies::OpenIDConnect",
+ scope: ["openid", "profile", "email"],
+ response_type: "code",
+ issuer: "https://login.microsoftonline.com/<tenant_id>/v2.0",
+ client_auth_method: "query",
+ discovery: true,
+ uid_field: "oid",
+ client_options: {
+ identifier: "<client_id>",
+ secret: "<client_secret>",
+ redirect_uri: "https://gitlab.example.com/users/auth/azure_activedirectory_v2/callback"
+ }
- client_id: "<client_id>",
- client_secret: "<client_secret>",
- tenant_id: "<tenant_id>",
}
}
]
既存の設定の一部を削除し、図のように新しい設定を追加します。
- { name: 'azure_activedirectory_v2',
# label: 'Provider name', # optional label for login button, defaults to "Azure AD v2"
- args: { client_id: '<client_id>',
- client_secret: '<client_secret>',
- tenant_id: '<tenant_id>' } }
+ icon: "<custom_provider_icon>",
+ args: {
+ name: "azure_activedirectory_v2",
+ strategy_class: "OmniAuth::Strategies::OpenIDConnect",
+ scope: ["openid","profile","email"],
+ response_type: "code",
+ issuer: 'https://login.microsoftonline.com/<tenant_id>/v2.0',
+ discovery: true,
+ client_auth_method: 'query',
+ uid_field: 'oid',
+ send_scope_to_token_endpoint: "false",
+ client_options: {
+ identifier: "<client_id>",
+ secret: "<client_secret>",
+ redirect_uri: "<your_gitlab_url>/users/auth/azure_activedirectory_v2/callback"
+ }
+ }
}
その他のカスタマイズの詳細については、gitlab_username_claim
を参照してください。
Azure アプリケーションの登録
Microsoft Azure OAuth 2.0 OmniAuth プロバイダを有効にするには、Azure アプリケーションを登録し、クライアント ID とシークレットキーを取得する必要があります。
- Azure ポータルにサインインします。
- Azure Active Directory のテナントが複数ある場合は、目的のテナントに切り替えます。テナント ID をメモします。
-
アプリケーションを登録し、以下の情報を入力します:
- GitLab インストールの Azure OAuth コールバックの URL が必要です。例えば
- v1.0 エンドポイントの場合:
https://gitlab.example.com/users/auth/azure_oauth2/callback
. - v2.0エンドポイントについては、
https://gitlab.example.com/users/auth/azure_activedirectory_v2/callback
。
- v1.0 エンドポイントの場合:
- アプリケーション・タイプは、Web に設定する必要があります。
- GitLab インストールの Azure OAuth コールバックの URL が必要です。例えば
-
クライアントIDとクライアントシークレットを保存します。クライアントシークレットは一度しか表示されません。
必要に応じて、新しいアプリケーションシークレットを作成できます。
client ID
とclient secret
は OAuth 2.0 に関連する用語です。マイクロソフトのドキュメントでは、この用語はApplication ID
とApplication Secret
という名前になっているものもあります。
API権限(スコープ)の追加
v2.0 エンドポイントを使用している場合は、アプリケーションを作成した後、Web API を公開するように設定します。Microsoft Graph APIの下に以下の権限を追加します:
email
openid
profile
または、User.Read.All
アプリケーション権限を追加します。
GitLab で Microsoft OAuth を有効にします。
-
GitLab サーバーで設定ファイルを開きます。
-
Linuxパッケージ・インストールの場合:
sudo editor /etc/gitlab/gitlab.rb
-
セルフコンパイルによるインストールの場合:
cd /home/git/gitlab sudo -u git -H editor config/gitlab.yml
-
-
共通設定を構成して、シングルサインオンプロバイダとして
azure_oauth2
。これにより、既存のGitLabアカウントを持っていないユーザーのためのJust-In-Timeアカウントプロビジョニングが可能になります。 -
プロバイダー設定を追加します。
<client_id>
、<client_secret>
、<tenant_id>
を Azure アプリケーションを登録したときに取得した値に置き換えます。-
Linuxパッケージ・インストールの場合:
v1.0エンドポイントの場合:
gitlab_rails['omniauth_providers'] = [ { name: "azure_oauth2", # label: "Provider name", # optional label for login button, defaults to "Azure AD" args: { client_id: "<client_id>", client_secret: "<client_secret>", tenant_id: "<tenant_id>", } } ]
v2.0エンドポイントの場合:
gitlab_rails['omniauth_providers'] = [ { "name" => "azure_activedirectory_v2", "label" => "Provider name", # optional label for login button, defaults to "Azure AD v2" "args" => { "client_id" => "<client_id>", "client_secret" => "<client_secret>", "tenant_id" => "<tenant_id>", } } ]
代替 Azure クラウドについては、
args
セクションの下にbase_azure_url
を設定します。たとえば、Azure Government Community Cloud の場合、(GCC):gitlab_rails['omniauth_providers'] = [ { "name" => "azure_activedirectory_v2", "label" => "Provider name", # optional label for login button, defaults to "Azure AD v2" "args" => { "client_id" => "<client_id>", "client_secret" => "<client_secret>", "tenant_id" => "<tenant_id>", "base_azure_url" => "https://login.microsoftonline.us" } } ]
-
セルフコンパイルによるインストールの場合:
v1.0エンドポイントの場合:
- { name: 'azure_oauth2', # label: 'Provider name', # optional label for login button, defaults to "Azure AD" args: { client_id: '<client_id>', client_secret: '<client_secret>', tenant_id: '<tenant_id>' } }
v2.0エンドポイントの場合:
- { name: 'azure_activedirectory_v2', label: 'Provider name', # optional label for login button, defaults to "Azure AD v2" args: { client_id: "<client_id>", client_secret: "<client_secret>", tenant_id: "<tenant_id>" } }
代替 Azure クラウドについては、
args
セクションの下にbase_azure_url
を設定します。たとえば、Azure Government Community Cloud の場合、(GCC):- { name: 'azure_activedirectory_v2', label: 'Provider name', # optional label for login button, defaults to "Azure AD v2" args: { client_id: "<client_id>", client_secret: "<client_secret>", tenant_id: "<tenant_id>", base_azure_url: "https://login.microsoftonline.us" } }
また、オプションで
args
セクションにscope
forOAuth 2.0 scopesパラメータを追加できます。デフォルトはopenid profile email
です。 -
-
設定ファイルを保存します。
-
Linuxパッケージを使ってインストールした場合はGitLabを再設定し、セルフコンパイルでインストールした場合はGitLabを再起動します。
-
GitLab サインインページを更新してください。サインインフォームの下にMicrosoftのアイコンが表示されるはずです。
-
アイコンを選択します。Microsoftにサインインし、GitLabアプリケーションを承認します。
既存のGitLabユーザーが新しいAzure ADアカウントに接続する方法については、Enable OmniAuth for an existing userをお読みください。
トラブルシューティング
ユーザーサインインのバナーメッセージ:外部UIDは既に取得されています
サインイン時に、Extern UID has already been taken
というエラーが表示されることがあります。
これを解決するには、Railsコンソールを使って、アカウントに紐づく既存のユーザーが存在するかどうかを確認します:
-
extern_uid
を見つけてください:id = Identity.where(extern_uid: '<extern_uid>')
-
内容を印刷して、その
extern_uid
に付いているユーザー名を探します:pp id
extern_uid
がアカウントに添付されている場合、そのユーザー名を使ってサインインできます。
extern_uid
、どのユーザー名にも添付されていない場合は、削除エラーによりゴーストレコードになっている可能性があります。
次のコマンドを実行して ID を削除し、extern uid
をリリースしてください:
Identity.find('<id>').delete