Microsoft Azure를 OAuth 2.0 인증 공급자로 사용
Offering: GitLab Self-Managed
Microsoft Azure OAuth 2.0 OmniAuth 공급자를 활성화하고 Microsoft Azure 자격 증명으로 GitLab에 로그인할 수 있습니다. GitLab을 처음으로 Azure/Entra ID와 통합하는 경우 Microsoft ID 플랫폼(v2.0) 엔드포인트를 사용하는 OpenID Connect 프로토콜을 구성하세요.
Microsoft Azure OAuth 2.0 OmniAuth 공급자를 활성화하고 Microsoft Azure 자격 증명으로 GitLab에 로그인할 수 있습니다.
GitLab을 처음으로 Azure/Entra ID와 통합하는 경우 Microsoft ID 플랫폼(v2.0) 엔드포인트를 사용하는 OpenID Connect 프로토콜을 구성하세요.
Generic OpenID Connect 구성으로 마이그레이션#
GitLab 17.0 이상에서는 azure_oauth2를 사용하는 인스턴스가 Generic OpenID Connect 구성으로 마이그레이션해야 합니다. 자세한 내용은 OpenID Connect 프로토콜로 마이그레이션을 참조하세요.
Azure 애플리케이션 등록#
Microsoft Azure OAuth 2.0 OmniAuth 공급자를 활성화하려면 Azure 애플리케이션을 등록하고 클라이언트 ID와 시크릿 키를 얻어야 합니다.
-
Azure 포털에 로그인합니다.
-
Azure Active Directory 테넌트가 여러 개인 경우 원하는 테넌트로 전환합니다. 테넌트 ID를 메모합니다.
-
애플리케이션을 등록하고 다음 정보를 제공합니다:
- GitLab 설치의 Azure OAuth 콜백 URL이 필요한 리디렉션 URI:
https://gitlab.example.com/users/auth/azure_activedirectory_v2/callback. - Web으로 설정해야 하는 애플리케이션 유형.
- GitLab 설치의 Azure OAuth 콜백 URL이 필요한 리디렉션 URI:
-
클라이언트 ID와 클라이언트 시크릿을 저장합니다. 클라이언트 시크릿은 한 번만 표시됩니다.
필요한 경우 새 애플리케이션 시크릿을 만들 수 있습니다.
client ID 및 client secret은 OAuth 2.0과 관련된 용어입니다.
일부 Microsoft 문서에서는 이 용어를 Application ID 및 Application Secret이라고 합니다.
API 권한(범위) 추가#
애플리케이션을 만든 후 웹 API를 노출하도록 구성합니다. Microsoft Graph API에서 다음 위임된 권한을 추가합니다:
emailopenidprofile
또는 User.Read.All 애플리케이션 권한을 추가합니다.
GitLab에서 Microsoft OAuth 활성화#
새 프로젝트의 경우 Microsoft ID 플랫폼(v2.0) 엔드포인트를 사용하는 OpenID Connect 프로토콜을 사용해야 합니다.
-
GitLab 서버에서 구성 파일을 엽니다.
-
Linux 패키지 설치의 경우:
sudo editor /etc/gitlab/gitlab.rb -
소스에서 컴파일한 설치의 경우:
cd /home/git/gitlab sudo -u git -H editor config/gitlab.yml
-
-
azure_activedirectory_v2를 단일 사인온(SSO) 공급자로 추가하도록 일반 설정을 구성합니다. 이를 통해 기존 GitLab 계정이 없는 사용자에 대한 Just-In-Time 계정 프로비저닝이 가능합니다. -
공급자 구성을 추가합니다.
<client_id>,<client_secret>,<tenant_id>를 Azure 애플리케이션을 등록할 때 얻은 값으로 바꿉니다.-
Linux 패키지 설치의 경우:
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" } } ] -
소스에서 컴파일한 설치의 경우:
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섹션에 OAuth 2.0 범위에 대한scope매개변수를 추가할 수도 있습니다. 기본값은openid profile email입니다. -
-
구성 파일을 저장합니다.
-
Linux 패키지를 사용하여 설치한 경우 GitLab을 재구성하거나 소스에서 직접 컴파일한 경우 GitLab을 재시작합니다.
-
GitLab 로그인 페이지를 새로 고칩니다. 로그인 양식 아래에 Microsoft 아이콘이 표시되어야 합니다.
-
아이콘을 선택합니다. Microsoft에 로그인하고 GitLab 애플리케이션을 승인합니다.
기존 GitLab 사용자가 새 Azure AD 계정에 연결하는 방법에 대한 자세한 내용은 기존 사용자에 대해 OmniAuth 활성화를 참조하세요.
문제 해결#
사용자 로그인 배너 메시지: Extern UID has already been taken#
로그인 시 Extern UID has already been taken 오류가 발생할 수 있습니다.
이 문제를 해결하려면 Rails 콘솔을 사용하여 계정에 연결된 기존 사용자가 있는지 확인합니다:
-
extern_uid를 찾습니다:id = Identity.where(extern_uid: '<extern_uid>') -
해당
extern_uid에 연결된 사용자 이름을 찾기 위해 내용을 출력합니다:pp id
extern_uid가 계정에 연결된 경우 해당 사용자 이름으로 로그인할 수 있습니다.
extern_uid가 어떤 사용자 이름에도 연결되지 않은 경우, 이는 고스트 레코드를 발생시키는 삭제 오류로 인한 것일 수 있습니다.
extern uid를 해제하기 위해 ID를 삭제하려면 다음 명령을 실행합니다:
Identity.find('<id>').delete
