Microsoft Azure를 OAuth 2.0 인증 공급자로 사용하기
Microsoft Azure OAuth 2.0 OmniAuth 공급자를 활성화하여 Microsoft Azure 자격 증명으로 GitLab에 로그인할 수 있습니다.
Azure 애플리케이션 등록
Microsoft Azure OAuth 2.0 OmniAuth 공급자를 활성화하려면 Azure 애플리케이션을 등록하고 클라이언트 ID 및 시크릿 키를 가져와야 합니다.
- Azure 포털에 로그인합니다.
- 여러 Azure Active Directory 테넌트가 있는 경우 원하는 테넌트로 전환합니다. 테넌트 ID를 메모합니다.
-
응용 프로그램을 등록하고 다음 정보를 제공합니다.
- 리디렉션 URI, GitLab 설치의 Azure OAuth 콜백 URL이 필요합니다.
https://gitlab.example.com/users/auth/azure_activedirectory_v2/callback
. - 웹으로 설정해야 하는 응용 프로그램 유형입니다.
- 리디렉션 URI, GitLab 설치의 Azure OAuth 콜백 URL이 필요합니다.
-
클라이언트 ID와 클라이언트 시크릿을 저장합니다. 클라이언트 시크릿은 한 번만 표시됩니다.
필요한 경우 새 응용 프로그램 비밀을 생성할 수 있습니다.
client ID
와 client secret
는 OAuth 2.0과 관련된 용어입니다.
일부 Microsoft 설명서에서는 해당 용어를 Application ID
및 Application Secret
라고 합니다.
API 권한(범위) 추가
응용 프로그램을 만든 후 웹 API를 노출하도록 구성하고 Microsoft 그래프 API에 다음 위임된 권한(Delegated Permissions)을 추가합니다:
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
를 단일 사인온(Single Sign-On) 공급자로 추가합니다. 기존의 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" } }
또는 선택적으로
scope
를 OAuth 2.0 범위 매개변수로args
섹션에 추가할 수 있습니다. 기본값은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
를 해제하기 위해 다음 명령을 실행합니다:
Identity.find('<id>').delete