Microsoft Azure를 OAuth 2.0 인증 공급자로 사용하기
Microsoft Azure OAuth 2.0 OmniAuth 공급자를 활성화하여 Microsoft Azure 자격 증명으로 GitLab에 로그인할 수 있습니다.
일반 OpenID Connect 구성으로 마이그레이션
GitLab 17.0 이상에서 azure_oauth2
를 사용하는 인스턴스는 일반 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
. -
웹
으로 설정해야 하는 애플리케이션 유형.
- GitLab 설치의 Azure OAuth 콜백 URL을 필요로 하는 리디렉트 URI.
-
클라이언트 ID와 클라이언트 비밀 키를 저장합니다. 클라이언트 비밀 키는 한 번만 표시됩니다.
필요한 경우 새 애플리케이션 비밀 키를 생성할 수 있습니다.
client ID
및 client secret
은 OAuth 2.0에 관련된 용어입니다. 일부 Microsoft 문서에서는 이 용어를 Application ID
및 Application Secret
로 지칭합니다.
API 권한(범위) 추가
애플리케이션을 생성한 후 웹 API 노출을 구성하고 Microsoft 그래프 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_activedirectory_v2
를 단일 사인온 공급자로 추가하려면 일반 설정을 구성합니다. 이렇게 하면 기존 GitLab 계정이 없는 사용자를 위한 즉시 계정 프로비저닝이 활성화됩니다. -
공급자 구성을 추가합니다. Azure 애플리케이션을 등록할 때 얻은 값을
<client_id>
,<client_secret>
,<tenant_id>
로 대체합니다.-
Linux 패키지 설치의 경우:
gitlab_rails['omniauth_providers'] = [ { "name" => "azure_activedirectory_v2", "label" => "공급자 이름", # 선택 사항, 기본값은 "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" => "공급자 이름", # 선택 사항, 기본값은 "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: '공급자 이름', # 선택 사항, 기본값은 "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: '공급자 이름', # 선택 사항, 기본값은 "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가 이미 사용되었습니다
로그인 시 Extern UID가 이미 사용되었습니다
라는 오류 메시지가 표시될 수 있습니다.
이 문제를 해결하려면 Rails 콘솔을 사용하여 해당 계정에 연결된 기존 사용자가 있는지 확인하십시오:
-
extern_uid
를 찾습니다:id = Identity.where(extern_uid: '<extern_uid>')
-
해당
extern_uid
에 연결된 사용자 이름을 찾기 위해 내용을 출력합니다:pp id
만약 extern_uid
가 어떤 계정에 연결되어 있다면 해당 사용자 이름을 사용하여 로그인할 수 있습니다.
만약 extern_uid
가 어떠한 사용자 이름에도 연결되어 있지 않다면, 추측 레코드로 인한 삭제 오류로 인해 발생한 것일 수 있습니다.
다음 명령을 실행하여 Identity를 삭제하여 extern uid
를 해제하십시오:
Identity.find('<id>').delete