GitLab을 OAuth 2.0 인증 ID 제공자로 구성하기

OAuth 2.0은 리소스 소유자를 대리하여 클라이언트 응용 프로그램에 안전한 위임 서버 리소스 액세스를 제공합니다. OAuth 2는 인가 서버가 리소스 소유자나 최종 사용자의 승인으로 타사 클라이언트에게 액세스 토큰을 발급할 수 있습니다.

다음 유형의 OAuth 2 응용 프로그램을 인스턴스에 추가하여 GitLab을 OAuth 2 인증 ID 제공자로 사용할 수 있습니다:

이러한 방법들은 권한 수준에 따라 다릅니다. 기본 콜백 URL은 SSL URL인 https://your-gitlab.example.com/users/auth/gitlab/callback입니다. 대신 SSL URL을 사용할 수도 있지만 SSL URL을 사용해야 합니다.

인스턴스에 OAuth 2 응용 프로그램을 추가한 후에, OAuth 2를 사용하여 다음을 수행할 수 있습니다:

  • 사용자가 GitLab.com 계정으로 응용 프로그램에 로그인할 수 있도록 함.
  • 자세한 내용은 GitLab.com과의 서버 통합을 참조하여 GitLab.com을 GitLab 인스턴스에 대한 인증으로 설정함.

  • 응용 프로그램을 만든 후에는 외부 서비스가 OAuth 2 API를 사용하여 액세스 토큰을 관리할 수 있습니다.

사용자 소유 응용 프로그램 만들기

사용자를 위해 새 응용 프로그램을 만들려면:

  1. 왼쪽 사이드바에서 아바타를 선택합니다.
  2. 프로필 편집을 선택합니다.
  3. 왼쪽 사이드바에서 응용 프로그램을 선택합니다.
  4. 새 응용 프로그램 추가를 선택합니다.
  5. 이름리디렉션 URI를 입력합니다.
  6. 인증된 응용 프로그램에서 정의된 OAuth 2 범위를 선택합니다.
  7. 리디렉션 URI에는 사용자가 GitLab에서 승인을 완료한 후 전송되는 URL을 입력합니다.
  8. 응용 프로그램 저장을 선택합니다. GitLab은 다음을 제공합니다:

    • 응용 프로그램 ID의 OAuth 2 클라이언트 ID.
    • 비밀 필드에서 복사를 선택하여 액세스할 수 있는 OAuth 2 클라이언트 비밀.
    • GitLab 15.9 및 이후에서 비밀 갱신 기능. 이 기능을 사용하여 이 응용 프로그램에 대한 새로운 비밀을 생성하고 복사합니다. 비밀을 갱신하면 새 자격 증명이 업데이트될 때까지 기존 응용 프로그램이 작동하지 않게 됩니다.

그룹 소유 응용 프로그램 만들기

그룹을 위해 새 응용 프로그램을 만들려면:

  1. 원하는 그룹으로 이동합니다.
  2. 왼쪽 사이드바에서 설정 > 응용 프로그램을 선택합니다.
  3. 이름리디렉션 URI를 입력합니다.
  4. 인증된 응용 프로그램에서 정의된 OAuth 2 범위를 선택합니다.
  5. 리디렉션 URI에는 사용자가 GitLab에서 승인을 완료한 후 전송되는 URL을 입력합니다.
  6. 응용 프로그램 저장을 선택합니다. GitLab은 다음을 제공합니다:

    • 응용 프로그램 ID의 OAuth 2 클라이언트 ID.
    • 비밀 필드에서 복사를 선택하여 액세스할 수 있는 OAuth 2 클라이언트 비밀.
    • GitLab 15.9 및 이후에서 비밀 갱신 기능. 이 기능을 사용하여 이 응용 프로그램에 대한 새로운 비밀을 생성하고 복사합니다. 비밀을 갱신하면 새 자격 증명이 업데이트될 때까지 기존 응용 프로그램이 작동하지 않게 됩니다.

인스턴스 전역 응용 프로그램 만들기

Tier: Free, Premium, Ultimate Offering: Self-Managed

GitLab 인스턴스를 위한 응용 프로그램을 만들려면:

  1. 왼쪽 사이드바에서 맨 아래에서 관리 영역을 선택합니다.
  2. 응용 프로그램을 선택합니다.
  3. 새 응용 프로그램을 선택합니다.

관리 영역에서 응용 프로그램을 만들 때에는 신뢰할 수 있음으로 표시합니다. 이 응용 프로그램에 대한 사용자 인가 단계는 자동으로 건너뜁니다.

모든 인증된 응용 프로그램 보기

  • k8s_proxyGitLab 16.4에 도입되었으며, k8s_proxy_pat이라는 플래그로 활성화되어 있습니다. 기본적으로 활성화됩니다.
  • 기본적으로 활성화된 피처 플래그 k8s_proxy_patGitLab 16.5에서 제거되었습니다.

GitLab 자격 증명으로 승인한 모든 응용 프로그램을 볼려면:

  1. 왼쪽 사이드바에서 아바타를 선택합니다.
  2. 프로필 편집을 선택한 다음 응용 프로그램을 선택합니다.
  3. 인가된 응용 프로그램 섹션을 확인합니다.

GitLab OAuth 2 응용 프로그램은 응용 프로그램이 다양한 작업을 수행할 수 있도록 하는 범위를 지원합니다. 다음 표에서 사용 가능한 모든 범위를 확인하세요.

범위 설명
api 컨테이너 레지스트리, 의존성 프록시 및 패키지 레지스트리뿐만 아니라 모든 그룹 및 프로젝트에 대한 전체 읽기/쓰기 액세스를 부여합니다.
read_user 인증된 사용자의 프로필에 대한 읽기 전용 액세스를 제공합니다. 사용자 이름, 공개 이메일 및 전체 이름을 포함하는 /user API 엔드포인트 및 /users 아래의 읽기 전용 API 엔드포인트에도 액세스를 부여합니다.
read_api 컨테이너 레지스트리, 패키지 레지스트리를 비롯하여 모든 그룹 및 프로젝트에 대한 읽기 액세스를 부여합니다.
read_repository Git-over-HTTP 또는 리포지터리 파일 API를 사용하여 비공개 프로젝트의 리포지터리에 대한 읽기 전용 액세스를 부여합니다.
write_repository API를 사용하지 않고 Git-over-HTTP를 통해 비공개 프로젝트의 리포지터리에 대한 읽기/쓰기 액세스를 부여합니다.
read_registry 비공개 프로젝트의 컨테이너 레지스트리 이미지에 대한 읽기 전용 액세스를 부여합니다.
write_registry 비공개 프로젝트의 컨테이너 레지스트리 이미지에 대한 쓰기 전용 액세스를 부여합니다.
sudo 관리자 사용자로 인증된 경우 시스템에서 모든 사용자로 API 액션을 수행할 수 있는 권한을 부여합니다.
openid OpenID Connect를 사용하여 GitLab으로 인증할 수 있는 권한을 부여합니다. 사용자 프로필 및 그룹 멤버십에 대한 읽기 전용 액세스도 부여합니다.
profile OpenID Connect를 사용하여 사용자 프로필 데이터에 대한 읽기 전용 액세스를 부여합니다.
email OpenID Connect를 사용하여 사용자의 주 이메일 주소에 대한 읽기 전용 액세스를 부여합니다.
create_runner 러너를 생성할 수 있는 권한을 부여합니다.
k8s_proxy Kubernetes용 에이전트를 사용하여 Kubernetes API 호출을 수행할 수 있는 권한을 부여합니다.

언제든지 철회를 선택하여 모든 액세스를 철회할 수 있습니다.

액세스 토큰 만료

  • expires_in에 대한 데이터베이스 유효성 검사는 GitLab 15.10에 도입되었습니다. GitLab 인스턴스에 expires_in이 설정되지 않은 OAuth 액세스 토큰이 15.10 또는 그 이후로 업그레이드될 때 데이터베이스 이전은 오류를 발생시킵니다. 해결 방법은 GitLab 15.10.0 업그레이드 설명서를 참조하세요.
caution
만료되는 액세스 토큰에서 선택적으로 탈퇴하는 것은 GitLab 15.0에서 제거되었습니다. 모든 기존 통합은 액세스 토큰 새로 고침을 지원하도록 업데이트되어야 합니다.

액세스 토큰은 두 시간 후에 만료됩니다. 액세스 토큰을 사용하는 통합은 refresh_token 속성을 사용하여 새로 생성해야 합니다. 만료된 액세스 토큰의 새로 고침 토큰은 access_token 자체가 만료된 후에도 사용할 수 있습니다. 만료된 액세스 토큰을 새로 고칠 방법에 대한 자세한 정보는 OAuth 2.0 토큰 문서를 참조하세요.

이 만료 설정은 Doorkeeper에서 제공하는 GitLab의 OAuth 공급자 기능을 제공하는 Doorkeeperaccess_token_expires_in 구성을 사용하여 GitLab 코드베이스에 설정됩니다. 만료 설정은 구성할 수 없습니다.

응용 프로그램이 삭제되면 해당 응용 프로그램과 관련된 모든 부여 및 토큰도 삭제됩니다.

해시된 OAuth 애플리케이션 비밀

Self-Managed GitLab에서는 기본적으로 이 기능이 사용 가능합니다. 관리자는 hash_oauth_secrets라는 피처 플래그를 비활성화하여 이 기능을 숨길 수 있습니다. GitLab.com에서는 이 기능이 사용 가능합니다.

기본적으로 GitLab은 OAuth 애플리케이션 비밀을 해시 형식으로 데이터베이스에 저장합니다. 이러한 비밀은 OAuth 애플리케이션을 만든 직후에만 사용자에게 제공됩니다. GitLab의 이전 버전에서는 애플리케이션 비밀을 데이터베이스에 평문으로 저장했습니다.

GitLab에서 OAuth 2를 사용하는 다른 방법

다음을 수행할 수 있습니다:

  • Applications API를 사용하여 OAuth 2 애플리케이션을 만들고 관리합니다.
  • 타사 OAuth 2 제공업체를 사용하여 GitLab에 로그인할 수 있도록 사용자에게 권한을 부여합니다. 자세한 내용은 OmniAuth 문서를 참조하세요.
  • OAuth 2를 사용하여 GitLab Importer를 사용하여 사용자 자격증명을 공유하지 않고 리포지터리에 액세스할 수 있습니다.