InfoGrab DocsInfoGrab Docs

OmniAuth

요약

사용자는 Google, GitHub 등 널리 쓰이는 서비스의 자격 증명을 사용하여 GitLab에 로그인할 수 있습니다. 구성하면 로그인 페이지에 추가 로그인 옵션이 표시됩니다. GitLab은 다음 OmniAuth 공급자를 지원합니다.

사용자는 Google, GitHub 등 널리 쓰이는 서비스의 자격 증명을 사용하여 GitLab에 로그인할 수 있습니다. OmniAuth는 GitLab이 이 인증 기능을 제공하기 위해 사용하는 Rack 프레임워크입니다.

구성하면 로그인 페이지에 추가 로그인 옵션이 표시됩니다.

지원되는 공급자#

GitLab은 다음 OmniAuth 공급자를 지원합니다.

공급자 문서 OmniAuth 공급자 이름
AliCloud alicloud
Atlassian atlassian_oauth2
Auth0 auth0
AWS Cognito cognito
Azure v2 azure_activedirectory_v2
Bitbucket Cloud bitbucket
Generic OAuth 2.0 oauth2_generic
GitHub github
GitLab.com gitlab
Google google_oauth2
JWT jwt
Kerberos kerberos
OpenID Connect openid_connect
Salesforce salesforce
SAML saml
Shibboleth shibboleth

공통 설정 구성#

OmniAuth 공급자를 구성하기 전에 모든 공급자에 공통되는 설정을 구성합니다.

옵션 설명
allow_bypass_two_factor 지정된 공급자를 사용하여 2단계 인증(2FA) 없이 로그인할 수 있도록 허용합니다. true, false, 또는 공급자 배열로 설정할 수 있습니다. 자세한 내용은 2단계 인증 우회를 참고합니다.
allow_single_sign_on OmniAuth로 로그인할 때 계정을 자동으로 생성하도록 설정합니다. true, false, 또는 공급자 배열로 설정할 수 있습니다. 공급자 이름은 지원되는 공급자 표를 참고합니다. false인 경우 기존 GitLab 계정 없이 OmniAuth 공급자 계정으로 로그인할 수 없습니다. 먼저 GitLab 계정을 생성한 다음 프로필 설정을 통해 OmniAuth 공급자 계정에 연결해야 합니다.
auto_link_ldap_user OmniAuth 공급자를 통해 생성된 사용자에 대해 GitLab에 LDAP 아이덴티티를 생성합니다. 이 설정을 사용하려면 LDAP 통합이 활성화되어 있어야 합니다. LDAP와 OmniAuth 공급자 양쪽에서 사용자의 uid가 동일해야 합니다.
auto_link_saml_user SAML 공급자를 통해 인증하는 사용자가 이메일 주소가 일치하는 기존 GitLab 사용자에 자동으로 연결되도록 허용합니다. 이 설정을 사용하려면 SAML 통합이 활성화되어 있어야 합니다.
auto_link_user OmniAuth 공급자를 통해 인증하는 사용자가 이메일 주소가 일치하는 기존 GitLab 사용자에 자동으로 연결되도록 허용합니다. true, false, 또는 허용되는 공급자 배열을 받습니다. 기본적으로 안내형 연결 흐름을 사용할 수 있습니다. 자세한 내용은 OmniAuth로 로그인할 때 기존 계정 연결하기를 참고합니다.
auto_sign_in_with_provider 사용자가 단일 공급자 이름을 사용하여 자동으로 로그인하도록 설정합니다. 이 값은 saml 또는 google_oauth2와 같은 공급자 이름과 일치해야 합니다. 무한 로그인 루프를 방지하려면 사용자는 GitLab에서 로그아웃하기 전에 ID 공급자 계정에서 먼저 로그아웃해야 합니다. 지원되는 OmniAuth 공급자에 대해 연합 로그아웃을 구현하기 위한 SAML 등의 기능 개선이 진행 중입니다.
block_auto_created_users 자동으로 생성된 사용자를 관리자가 승인할 때까지 승인 대기 상태(로그인 불가)로 둡니다. false인 경우 SAML이나 Google처럼 직접 제어할 수 있는 공급자를 반드시 정의해야 합니다. 그렇지 않으면 인터넷상의 누구든 관리자 승인 없이 GitLab에 로그인할 수 있습니다. true인 경우 자동으로 생성된 사용자는 기본적으로 차단되며, 로그인하려면 관리자가 차단을 해제해야 합니다.
enabled GitLab에서 OmniAuth 사용 여부를 활성화하거나 비활성화합니다. false인 경우 사용자 인터페이스에 OmniAuth 공급자 버튼이 표시되지 않습니다.
external_providers external로 지정할 OmniAuth 공급자를 정의할 수 있습니다. 이렇게 하면 이러한 공급자를 통해 계정을 생성하거나 로그인하는 모든 사용자가 내부 프로젝트에 접근할 수 없습니다. Google의 google_oauth2처럼 공급자의 전체 이름을 사용해야 합니다. 자세한 내용은 외부 공급자 목록 만들기를 참고합니다.
providers 공급자 이름은 지원되는 공급자 표에서 확인할 수 있습니다.
sync_profile_attributes 로그인 시 공급자로부터 동기화할 프로필 속성 목록입니다. 자세한 내용은 OmniAuth 사용자 프로필 최신 상태로 유지하기를 참고합니다.
sync_profile_from_provider GitLab이 프로필 정보를 자동으로 동기화할 공급자 이름 목록입니다. 각 항목은 saml 또는 google_oauth2와 같은 공급자 이름과 일치해야 합니다. 자세한 내용은 OmniAuth 사용자 프로필 최신 상태로 유지하기를 참고합니다.

초기 설정 구성#

OmniAuth 설정을 변경하려면 다음과 같이 합니다.

  1. /etc/gitlab/gitlab.rb 파일을 편집합니다.

    # CAUTION!
    # This allows users to sign in without having a user account first. Define the allowed providers
    # using an array, for example, ["saml", "google_oauth2"], or as true/false to allow all providers or none.
    # User accounts will be created automatically when authentication was successful.
    gitlab_rails['omniauth_allow_single_sign_on'] = ['saml', 'google_oauth2']
    gitlab_rails['omniauth_auto_link_ldap_user'] = true
    gitlab_rails['omniauth_block_auto_created_users'] = true
    
  2. 파일을 저장하고 GitLab을 재구성합니다.

    sudo gitlab-ctl reconfigure
    
  1. Helm 값을 내보냅니다.

    helm get values gitlab > gitlab_values.yaml
    
  2. gitlab_values.yaml을 편집하고 globals.appConfig 아래의 omniauth 섹션을 업데이트합니다.

    global:
      appConfig:
        omniauth:
          enabled: true
          allowSingleSignOn: ['saml', 'google_oauth2']
          autoLinkLdapUser: false
          blockAutoCreatedUsers: true
    

    자세한 내용은 globals 문서를 참고합니다.

  3. 파일을 저장하고 새 값을 적용합니다.

    helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
    
  1. docker-compose.yml 파일을 편집합니다.

    version: "3.6"
    services:
      gitlab:
        environment:
          GITLAB_OMNIBUS_CONFIG: |
            gitlab_rails['omniauth_allow_single_sign_on'] = ['saml', 'google_oauth2']
            gitlab_rails['omniauth_auto_link_ldap_user'] = true
            gitlab_rails['omniauth_block_auto_created_users'] = true
    
  2. 파일을 저장하고 GitLab을 재시작합니다.

    docker compose up -d
    
  1. /home/git/gitlab/config/gitlab.yml 파일을 편집합니다.

    ## OmniAuth settings
    omniauth:
      # Allow sign-in by using Google, GitLab, etc. using OmniAuth providers
      # Versions prior to 11.4 require this to be set to true
      # enabled: true
    
      # CAUTION!
      # This allows users to sign in without having a user account first. Define the allowed providers
      # using an array, for example, ["saml", "google_oauth2"], or as true/false to allow all providers or none.
      # User accounts will be created automatically when authentication was successful.
      allow_single_sign_on: ["saml", "google_oauth2"]
    
      auto_link_ldap_user: true
    
      # Locks down those users until they have been cleared by the admin (default: true).
      block_auto_created_users: true
    
  2. 파일을 저장하고 GitLab을 재시작합니다.

    # For systems running systemd
    sudo systemctl restart gitlab.target
    
    # For systems running SysV init
    sudo service gitlab restart
    

이 설정을 구성한 후 원하는 공급자를 구성할 수 있습니다.

공급자별 구성#

allow_single_sign_on이 설정되어 있으면 GitLab은 로그인하는 사용자의 GitLab 사용자 이름을 만들기 위해 OmniAuth auth_hash에서 반환되는 다음 필드 중 존재하는 첫 번째 필드를 사용합니다.

  • username.
  • nickname.
  • email.

공급자별로 GitLab 구성을 만들 수 있으며, 이는 args를 사용하여 공급자에 전달됩니다. 공급자의 args 에 gitlab_username_claim 변수를 설정하면 GitLab 사용자 이름에 사용할 다른 클레임을 선택할 수 있습니다. 선택한 클레임은 충돌을 방지하기 위해 고유해야 합니다.

gitlab_rails['omniauth_providers'] = [

  # The generic pattern for configuring a provider with name PROVIDER_NAME

  gitlab_rails['omniauth_providers'] = {
    name: "PROVIDER_NAME"
    ...
    args: { gitlab_username_claim: 'sub' } # For users signing in with the provider you configure, the GitLab username will be set to the "sub" received from the provider
  },

  # Here are examples using GitHub and Kerberos

  gitlab_rails['omniauth_providers'] = {
    name: "github"
    ...
    args: { gitlab_username_claim: 'name' } # For users signing in with GitHub, the GitLab username will be set to the "name" received from GitHub
  },
  {
    name: "kerberos"
    ...
    args: { gitlab_username_claim: 'uid' } # For users signing in with Kerberos, the GitLab username will be set to the "uid" received from Kerberos
  },
]
- { name: 'PROVIDER_NAME',
  # ...
  args: { gitlab_username_claim: 'sub' }
}
- { name: 'github',
  # ...
  args: { gitlab_username_claim: 'name' }
}
- { name: 'kerberos',
  # ...
  args: { gitlab_username_claim: 'uid' }
}

OmniAuth로 생성된 사용자의 비밀번호#

통합 인증으로 생성된 사용자의 비밀번호 자동 생성 가이드에서는 GitLab이 OmniAuth로 생성된 사용자의 비밀번호를 생성하고 설정하는 방식에 대한 개요를 제공합니다.

기존 사용자에 대해 OmniAuth 활성화#

기존 사용자라면 GitLab 계정이 생성된 후 OmniAuth 공급자를 활성화할 수 있습니다. 예를 들어 원래 LDAP로 로그인했다면 Google과 같은 OmniAuth 공급자를 활성화할 수 있습니다.

프로필 설정을 통해 OmniAuth 공급자 연결#

프로필 설정을 통해 OmniAuth 공급자를 연결하려면 다음과 같이 합니다.

  1. GitLab 자격 증명, LDAP, 또는 다른 OmniAuth 공급자로 GitLab에 로그인합니다.
  2. 오른쪽 상단에서 아바타를 선택합니다.
  3. Edit profile을 선택합니다.
  4. 왼쪽 사이드바에서 Access > Password and authentication을 선택합니다.
  5. Service sign-in 섹션에서 Google과 같은 OmniAuth 공급자를 선택합니다.
  6. 공급자로 리디렉션됩니다. GitLab을 승인하면 다시 GitLab으로 리디렉션됩니다.

이제 선택한 OmniAuth 공급자를 사용하여 GitLab에 로그인할 수 있습니다.

OmniAuth로 로그인할 때 기존 계정 연결하기#

히스토리
  • GitLab 19.3에서 link_omniauth_to_existing_user_on_login이라는 이름의 기능 플래그와 함께 도입되었습니다. GitLab.com에서 활성화되어 있습니다.
  • GitLab 19.4에서 일반 공급(GA)되었습니다. 기능 플래그 link_omniauth_to_existing_user_on_login이 제거되었습니다.

이메일 주소가 기존 GitLab 계정과 일치하는 OmniAuth 공급자로 로그인하면, GitLab은 로그인 오류를 표시하는 대신 해당 공급자를 기존 계정에 연결하도록 안내합니다.

auto_link_user가 활성화되어 있으면 로그인 흐름 없이 자동으로 연결됩니다.

안내형 연결 흐름은 다음과 같이 작동합니다.

  1. OmniAuth 공급자로 로그인을 시도합니다.
  2. GitLab은 공급자로부터 받은 이메일 주소가 기존 계정과 일치함을 감지합니다.
  3. 다음 안내와 함께 로그인 페이지로 리디렉션됩니다. "<provider> 계정의 이메일 주소로 이미 계정이 존재합니다. 기존 자격 증명으로 로그인하여 <provider> 계정을 연결합니다."
  4. 사용자 이름과 비밀번호 같은 기존 자격 증명으로 로그인합니다.
  5. GitLab이 Authorize identity provider link 페이지를 표시합니다.
  6. Authorize를 선택합니다.

GitLab은 기본 이메일과 확인된 보조 이메일 주소를 모두 대상으로 이메일 주소를 일치시킵니다. 연결 후에는 OmniAuth 공급자를 사용하여 GitLab에 로그인할 수 있습니다.

로그인하여 기존 계정의 소유권을 증명한 후에만 연결이 설정되므로, 이 흐름은 이메일 일치만으로 계정을 연결하는 auto_link_user보다 더 안전합니다.

가져오기 소스를 비활성화하지 않고 OmniAuth 공급자로 로그인 활성화 또는 비활성화#

관리자는 일부 OmniAuth 공급자에 대해 로그인을 활성화하거나 비활성화할 수 있습니다.

Note

기본적으로 config/gitlab.yml에 구성된 모든 OAuth 공급자에 대해 로그인이 활성화되어 있습니다.

OmniAuth 공급자를 활성화하거나 비활성화하려면 다음과 같이 합니다.

  1. 오른쪽 상단에서 Admin을 선택합니다.
  2. 왼쪽 사이드바에서 Settings > General을 선택합니다.
  3. Sign-in restrictions를 펼칩니다.
  4. Enabled OAuth authentication sources 섹션에서 활성화하거나 비활성화할 각 공급자의 체크박스를 선택하거나 선택 해제합니다.

OmniAuth 비활성화#

OmniAuth는 기본적으로 활성화되어 있습니다. 다만 OmniAuth는 공급자가 구성되고 활성화된 경우에만 작동합니다.

OmniAuth 공급자를 개별적으로 비활성화했는데도 문제가 발생하면 구성 파일을 수정하여 OmniAuth 하위 시스템 전체를 비활성화할 수 있습니다.

gitlab_rails['omniauth_enabled'] = false
omniauth:
  enabled: false

기존 사용자를 OmniAuth 사용자에 연결#

이메일 주소가 일치하면 OmniAuth 사용자를 기존 GitLab 사용자에 연결할 수 있습니다. 두 가지 방법을 사용할 수 있습니다.

  • 자동 연결(auto_link_user): GitLab이 로그인 시 사용자의 별도 작업 없이 OmniAuth 아이덴티티를 일치하는 계정에 자동으로 연결합니다.
  • 안내형 연결: auto_link_user가 비활성화되어 있으면 GitLab은 아이덴티티를 연결하기 전에 사용자에게 기존 자격 증명으로 로그인하여 소유권을 확인하도록 요청합니다. 자세한 내용은 OmniAuth로 로그인할 때 기존 계정 연결하기를 참고합니다.

자동 연결#

이메일 주소가 일치할 때 OmniAuth 사용자를 기존 GitLab 사용자에 자동으로 연결하려면, auto_link_user를 활성화합니다.

다음 예시는 OpenID Connect 공급자와 Google OAuth 공급자에 대해 자동 연결을 활성화합니다.

gitlab_rails['omniauth_auto_link_user'] = ["openid_connect", "google_oauth2"]
omniauth:
  auto_link_user: ["openid_connect", "google_oauth2"]

이 자동 연결 활성화 방법은 SAML을 제외한 모든 공급자에서 작동합니다. SAML에 대해 자동 연결을 활성화하려면 SAML 설정 안내를 참고합니다.

외부 공급자 목록 만들기#

외부 OmniAuth 공급자 목록을 정의할 수 있습니다. 목록에 있는 공급자를 통해 계정을 생성하거나 GitLab에 로그인하는 사용자는 내부 프로젝트에 접근할 수 없으며 외부 사용자로 표시됩니다.

외부 공급자 목록을 정의하려면 공급자의 전체 이름을 사용합니다. 예를 들어 Google은 google_oauth2입니다. 공급자 이름은 지원되는 공급자 표의 OmniAuth provider name 열을 참고합니다.

Note

외부 공급자 목록에서 OmniAuth 공급자를 제거하는 경우, 이 로그인 방법을 사용하는 사용자의 계정이 완전한 내부 계정으로 업그레이드되도록 수동으로 업데이트해야 합니다.

gitlab_rails['omniauth_external_providers'] = ['saml', 'google_oauth2']
omniauth:
  external_providers: ['saml', 'google_oauth2']

OmniAuth 사용자 프로필 최신 상태로 유지하기#

히스토리
  • GitLab 17.9에서 job_title 및 organization 속성이 도입되었습니다.
Note

일부 공급자는 이러한 속성을 동기화하기 위해 추가 구성이 필요합니다. 예를 들어 SAML 공급자는 프로필 속성 매핑이 필요합니다.

선택한 OmniAuth 공급자로부터 프로필 동기화를 활성화할 수 있습니다. 다음 사용자 속성을 조합하여 동기화할 수 있습니다.

  • name
  • email
  • job_title
  • location
  • organization

LDAP를 사용하여 인증하는 경우 사용자의 이름과 이메일은 항상 동기화됩니다.

  1. /etc/gitlab/gitlab.rb 파일을 편집합니다.

    gitlab_rails['omniauth_sync_profile_from_provider'] = ['saml', 'google_oauth2']
    gitlab_rails['omniauth_sync_profile_attributes'] = ['name', 'email', 'job_title', 'location', 'organization']
    
  2. 파일을 저장하고 GitLab을 재구성합니다.

    sudo gitlab-ctl reconfigure
    
  1. Helm 값을 내보냅니다.

    helm get values gitlab > values.yaml
    
  2. values.yaml을 편집합니다.

    global:
      appConfig:
        omniauth:
          syncProfileFromProvider: ['saml', 'google_oauth2']
          syncProfileAttributes: ['name', 'email', 'job_title', 'location', 'organization']
    
  3. 파일을 저장하고 새 값을 적용합니다.

    helm upgrade -f values.yaml gitlab gitlab/gitlab
    
  1. docker-compose.yml 파일을 편집합니다.

    version: "3.6"
    services:
      gitlab:
        environment:
          GITLAB_OMNIBUS_CONFIG: |
            gitlab_rails['omniauth_sync_profile_from_provider'] = ['saml', 'google_oauth2']
            gitlab_rails['omniauth_sync_profile_attributes'] = ['name', 'email', 'job_title', 'location', 'organization']
    
  2. 파일을 저장하고 GitLab을 재시작합니다.

    docker compose up -d
    
  1. /home/git/gitlab/config/gitlab.yml 파일을 편집합니다.

    production: &base
      omniauth:
        sync_profile_from_provider: ['saml', 'google_oauth2']
        sync_profile_attributes: ['name', 'email', 'job_title', 'location', 'organization']
    
  2. 파일을 저장하고 GitLab을 재시작합니다.

    # For systems running systemd
    sudo systemctl restart gitlab.target
    
    # For systems running SysV init
    sudo service gitlab restart
    

2단계 인증 우회#

특정 OmniAuth 공급자를 사용하면 사용자는 2단계 인증(2FA) 없이 로그인할 수 있습니다.

2FA를 우회하려면 다음 중 하나를 수행합니다.

  • 배열을 사용하여 허용되는 공급자를 정의합니다(예: ['saml', 'google_oauth2']).
  • 모든 공급자를 허용하려면 true를, 허용하지 않으려면 false를 지정합니다.

이 옵션은 이미 2FA를 사용하는 공급자에 대해서만 구성해야 합니다. 기본값은 false입니다.

이 구성은 SAML에는 적용되지 않습니다.

gitlab_rails['omniauth_allow_bypass_two_factor'] = ['saml', 'google_oauth2']
omniauth:
  allow_bypass_two_factor: ['saml', 'google_oauth2']

공급자로 자동 로그인#

GitLab 구성에 auto_sign_in_with_provider 설정을 추가하여 로그인 요청을 인증을 위해 OmniAuth 공급자로 리디렉션할 수 있습니다. 이렇게 하면 로그인 전에 공급자를 선택할 필요가 없어집니다.

예를 들어 Azure v2 통합에 대해 자동 로그인을 활성화하려면 다음과 같이 합니다.

gitlab_rails['omniauth_auto_sign_in_with_provider'] = 'azure_activedirectory_v2'
omniauth:
  auto_sign_in_with_provider: azure_activedirectory_v2

모든 로그인 시도가 OmniAuth 공급자로 리디렉션되므로 로컬 자격 증명으로는 로그인할 수 없다는 점에 유의합니다. OmniAuth 사용자 중 최소 한 명은 반드시 관리자여야 합니다.

https://gitlab.example.com/users/sign_in?auto_sign_in=false로 이동하여 자동 로그인을 우회할 수도 있습니다.

사용자 지정 OmniAuth 공급자 아이콘 사용#

지원되는 대부분의 공급자에는 렌더링된 로그인 버튼에 사용되는 내장 아이콘이 포함되어 있습니다.

자체 아이콘을 사용하려면 이미지가 64 x 64픽셀로 렌더링되도록 최적화되어 있는지 확인한 다음, 다음 두 가지 방법 중 하나로 아이콘을 재정의합니다.

  • 사용자 지정 이미지 경로 제공:

    1. GitLab 서버 도메인 외부에서 이미지를 호스팅하는 경우 콘텐츠 보안 정책이 이미지 파일에 대한 접근을 허용하도록 구성되어 있는지 확인합니다.
    2. GitLab 설치 방법에 따라 GitLab 구성 파일에 사용자 지정 icon 매개변수를 추가합니다. OpenID Connect 공급자의 예시는 OpenID Connect OmniAuth 공급자를 참고합니다.
  • 구성 파일에 이미지 직접 포함: 다음 예시는 Base64로 인코딩된 이미지 버전을 만들며, 이를 Data URL을 통해 제공할 수 있습니다.

    1. GNU base64 명령(예: base64 -w 0 <logo.png>)으로 이미지 파일을 인코딩합니다. 이 명령은 한 줄의 <base64-data> 문자열을 반환합니다.

    2. Base64로 인코딩된 데이터를 GitLab 구성 파일의 사용자 지정 icon 매개변수에 추가합니다.

      omniauth:
        providers:
          - { name: '...'
              icon: 'data:image/png;base64,<base64-data>'
              # Additional parameters removed for readability
            }
      

앱 또는 구성 변경#

GitLab의 OAuth는 동일한 외부 인증·인가 공급자를 여러 공급자로 설정하는 것을 지원하지 않으므로, 공급자나 앱을 변경하는 경우 GitLab 구성과 사용자 식별 정보를 동시에 업데이트해야 합니다. 예를 들어 saml과 azure_activedirectory_v2는 설정할 수 있지만 동일한 구성에 두 번째 azure_activedirectory_v2를 추가할 수는 없습니다.

이 안내는 GitLab이 extern_uid를 저장하고 이것이 사용자 인증에 사용되는 유일한 데이터인 모든 인증 방식에 적용됩니다.

공급자 내에서 앱을 변경할 때 사용자의 extern_uid가 바뀌지 않는다면 GitLab 구성만 업데이트하면 됩니다.

구성을 교체하려면 다음과 같이 합니다.

  1. gitlab.rb 파일에서 공급자 구성을 변경합니다.
  2. 이전 공급자에 대한 아이덴티티가 GitLab에 있는 모든 사용자의 extern_uid를 업데이트합니다.

extern_uid를 찾으려면 기존 사용자의 현재 extern_uid를 확인하여 동일한 사용자에 대해 현재 공급자의 해당 필드와 일치하는 ID를 찾습니다.

extern_uid를 업데이트하는 방법은 두 가지입니다.

  • Users API를 사용합니다. 공급자 이름과 새 extern_uid를 전달합니다.

  • Rails 콘솔을 사용합니다.

    Identity.where(extern_uid: 'old-id').update!(extern_uid: 'new-id')
    

알려진 문제#

지원되는 대부분의 OmniAuth 공급자는 HTTP를 통한 Git 비밀번호 인증을 지원하지 않습니다. 해결 방법으로 개인 액세스 토큰을 사용하여 인증할 수 있습니다.

OmniAuth

GitLab v19.5
Tier: Free, Premium, Ultimate
Offering: GitLab Self-Managed
원문 보기

요약

사용자는 Google, GitHub 등 널리 쓰이는 서비스의 자격 증명을 사용하여 GitLab에 로그인할 수 있습니다. 구성하면 로그인 페이지에 추가 로그인 옵션이 표시됩니다. GitLab은 다음 OmniAuth 공급자를 지원합니다.

사용자는 Google, GitHub 등 널리 쓰이는 서비스의 자격 증명을 사용하여 GitLab에 로그인할 수 있습니다. OmniAuth는 GitLab이 이 인증 기능을 제공하기 위해 사용하는 Rack 프레임워크입니다.

구성하면 로그인 페이지에 추가 로그인 옵션이 표시됩니다.

지원되는 공급자#

GitLab은 다음 OmniAuth 공급자를 지원합니다.

공급자 문서 OmniAuth 공급자 이름
AliCloud alicloud
Atlassian atlassian_oauth2
Auth0 auth0
AWS Cognito cognito
Azure v2 azure_activedirectory_v2
Bitbucket Cloud bitbucket
Generic OAuth 2.0 oauth2_generic
GitHub github
GitLab.com gitlab
Google google_oauth2
JWT jwt
Kerberos kerberos
OpenID Connect openid_connect
Salesforce salesforce
SAML saml
Shibboleth shibboleth

공통 설정 구성#

OmniAuth 공급자를 구성하기 전에 모든 공급자에 공통되는 설정을 구성합니다.

옵션 설명
allow_bypass_two_factor 지정된 공급자를 사용하여 2단계 인증(2FA) 없이 로그인할 수 있도록 허용합니다. true, false, 또는 공급자 배열로 설정할 수 있습니다. 자세한 내용은 2단계 인증 우회를 참고합니다.
allow_single_sign_on OmniAuth로 로그인할 때 계정을 자동으로 생성하도록 설정합니다. true, false, 또는 공급자 배열로 설정할 수 있습니다. 공급자 이름은 지원되는 공급자 표를 참고합니다. false인 경우 기존 GitLab 계정 없이 OmniAuth 공급자 계정으로 로그인할 수 없습니다. 먼저 GitLab 계정을 생성한 다음 프로필 설정을 통해 OmniAuth 공급자 계정에 연결해야 합니다.
auto_link_ldap_user OmniAuth 공급자를 통해 생성된 사용자에 대해 GitLab에 LDAP 아이덴티티를 생성합니다. 이 설정을 사용하려면 LDAP 통합이 활성화되어 있어야 합니다. LDAP와 OmniAuth 공급자 양쪽에서 사용자의 uid가 동일해야 합니다.
auto_link_saml_user SAML 공급자를 통해 인증하는 사용자가 이메일 주소가 일치하는 기존 GitLab 사용자에 자동으로 연결되도록 허용합니다. 이 설정을 사용하려면 SAML 통합이 활성화되어 있어야 합니다.
auto_link_user OmniAuth 공급자를 통해 인증하는 사용자가 이메일 주소가 일치하는 기존 GitLab 사용자에 자동으로 연결되도록 허용합니다. true, false, 또는 허용되는 공급자 배열을 받습니다. 기본적으로 안내형 연결 흐름을 사용할 수 있습니다. 자세한 내용은 OmniAuth로 로그인할 때 기존 계정 연결하기를 참고합니다.
auto_sign_in_with_provider 사용자가 단일 공급자 이름을 사용하여 자동으로 로그인하도록 설정합니다. 이 값은 saml 또는 google_oauth2와 같은 공급자 이름과 일치해야 합니다. 무한 로그인 루프를 방지하려면 사용자는 GitLab에서 로그아웃하기 전에 ID 공급자 계정에서 먼저 로그아웃해야 합니다. 지원되는 OmniAuth 공급자에 대해 연합 로그아웃을 구현하기 위한 SAML 등의 기능 개선이 진행 중입니다.
block_auto_created_users 자동으로 생성된 사용자를 관리자가 승인할 때까지 승인 대기 상태(로그인 불가)로 둡니다. false인 경우 SAML이나 Google처럼 직접 제어할 수 있는 공급자를 반드시 정의해야 합니다. 그렇지 않으면 인터넷상의 누구든 관리자 승인 없이 GitLab에 로그인할 수 있습니다. true인 경우 자동으로 생성된 사용자는 기본적으로 차단되며, 로그인하려면 관리자가 차단을 해제해야 합니다.
enabled GitLab에서 OmniAuth 사용 여부를 활성화하거나 비활성화합니다. false인 경우 사용자 인터페이스에 OmniAuth 공급자 버튼이 표시되지 않습니다.
external_providers external로 지정할 OmniAuth 공급자를 정의할 수 있습니다. 이렇게 하면 이러한 공급자를 통해 계정을 생성하거나 로그인하는 모든 사용자가 내부 프로젝트에 접근할 수 없습니다. Google의 google_oauth2처럼 공급자의 전체 이름을 사용해야 합니다. 자세한 내용은 외부 공급자 목록 만들기를 참고합니다.
providers 공급자 이름은 지원되는 공급자 표에서 확인할 수 있습니다.
sync_profile_attributes 로그인 시 공급자로부터 동기화할 프로필 속성 목록입니다. 자세한 내용은 OmniAuth 사용자 프로필 최신 상태로 유지하기를 참고합니다.
sync_profile_from_provider GitLab이 프로필 정보를 자동으로 동기화할 공급자 이름 목록입니다. 각 항목은 saml 또는 google_oauth2와 같은 공급자 이름과 일치해야 합니다. 자세한 내용은 OmniAuth 사용자 프로필 최신 상태로 유지하기를 참고합니다.

초기 설정 구성#

OmniAuth 설정을 변경하려면 다음과 같이 합니다.

  1. /etc/gitlab/gitlab.rb 파일을 편집합니다.

    # CAUTION!
    # This allows users to sign in without having a user account first. Define the allowed providers
    # using an array, for example, ["saml", "google_oauth2"], or as true/false to allow all providers or none.
    # User accounts will be created automatically when authentication was successful.
    gitlab_rails['omniauth_allow_single_sign_on'] = ['saml', 'google_oauth2']
    gitlab_rails['omniauth_auto_link_ldap_user'] = true
    gitlab_rails['omniauth_block_auto_created_users'] = true
    
  2. 파일을 저장하고 GitLab을 재구성합니다.

    sudo gitlab-ctl reconfigure
    
  1. Helm 값을 내보냅니다.

    helm get values gitlab > gitlab_values.yaml
    
  2. gitlab_values.yaml을 편집하고 globals.appConfig 아래의 omniauth 섹션을 업데이트합니다.

    global:
      appConfig:
        omniauth:
          enabled: true
          allowSingleSignOn: ['saml', 'google_oauth2']
          autoLinkLdapUser: false
          blockAutoCreatedUsers: true
    

    자세한 내용은 globals 문서를 참고합니다.

  3. 파일을 저장하고 새 값을 적용합니다.

    helm upgrade -f gitlab_values.yaml gitlab gitlab/gitlab
    
  1. docker-compose.yml 파일을 편집합니다.

    version: "3.6"
    services:
      gitlab:
        environment:
          GITLAB_OMNIBUS_CONFIG: |
            gitlab_rails['omniauth_allow_single_sign_on'] = ['saml', 'google_oauth2']
            gitlab_rails['omniauth_auto_link_ldap_user'] = true
            gitlab_rails['omniauth_block_auto_created_users'] = true
    
  2. 파일을 저장하고 GitLab을 재시작합니다.

    docker compose up -d
    
  1. /home/git/gitlab/config/gitlab.yml 파일을 편집합니다.

    ## OmniAuth settings
    omniauth:
      # Allow sign-in by using Google, GitLab, etc. using OmniAuth providers
      # Versions prior to 11.4 require this to be set to true
      # enabled: true
    
      # CAUTION!
      # This allows users to sign in without having a user account first. Define the allowed providers
      # using an array, for example, ["saml", "google_oauth2"], or as true/false to allow all providers or none.
      # User accounts will be created automatically when authentication was successful.
      allow_single_sign_on: ["saml", "google_oauth2"]
    
      auto_link_ldap_user: true
    
      # Locks down those users until they have been cleared by the admin (default: true).
      block_auto_created_users: true
    
  2. 파일을 저장하고 GitLab을 재시작합니다.

    # For systems running systemd
    sudo systemctl restart gitlab.target
    
    # For systems running SysV init
    sudo service gitlab restart
    

이 설정을 구성한 후 원하는 공급자를 구성할 수 있습니다.

공급자별 구성#

allow_single_sign_on이 설정되어 있으면 GitLab은 로그인하는 사용자의 GitLab 사용자 이름을 만들기 위해 OmniAuth auth_hash에서 반환되는 다음 필드 중 존재하는 첫 번째 필드를 사용합니다.

  • username.
  • nickname.
  • email.

공급자별로 GitLab 구성을 만들 수 있으며, 이는 args를 사용하여 공급자에 전달됩니다. 공급자의 args 에 gitlab_username_claim 변수를 설정하면 GitLab 사용자 이름에 사용할 다른 클레임을 선택할 수 있습니다. 선택한 클레임은 충돌을 방지하기 위해 고유해야 합니다.

gitlab_rails['omniauth_providers'] = [

  # The generic pattern for configuring a provider with name PROVIDER_NAME

  gitlab_rails['omniauth_providers'] = {
    name: "PROVIDER_NAME"
    ...
    args: { gitlab_username_claim: 'sub' } # For users signing in with the provider you configure, the GitLab username will be set to the "sub" received from the provider
  },

  # Here are examples using GitHub and Kerberos

  gitlab_rails['omniauth_providers'] = {
    name: "github"
    ...
    args: { gitlab_username_claim: 'name' } # For users signing in with GitHub, the GitLab username will be set to the "name" received from GitHub
  },
  {
    name: "kerberos"
    ...
    args: { gitlab_username_claim: 'uid' } # For users signing in with Kerberos, the GitLab username will be set to the "uid" received from Kerberos
  },
]
- { name: 'PROVIDER_NAME',
  # ...
  args: { gitlab_username_claim: 'sub' }
}
- { name: 'github',
  # ...
  args: { gitlab_username_claim: 'name' }
}
- { name: 'kerberos',
  # ...
  args: { gitlab_username_claim: 'uid' }
}

OmniAuth로 생성된 사용자의 비밀번호#

통합 인증으로 생성된 사용자의 비밀번호 자동 생성 가이드에서는 GitLab이 OmniAuth로 생성된 사용자의 비밀번호를 생성하고 설정하는 방식에 대한 개요를 제공합니다.

기존 사용자에 대해 OmniAuth 활성화#

기존 사용자라면 GitLab 계정이 생성된 후 OmniAuth 공급자를 활성화할 수 있습니다. 예를 들어 원래 LDAP로 로그인했다면 Google과 같은 OmniAuth 공급자를 활성화할 수 있습니다.

프로필 설정을 통해 OmniAuth 공급자 연결#

프로필 설정을 통해 OmniAuth 공급자를 연결하려면 다음과 같이 합니다.

  1. GitLab 자격 증명, LDAP, 또는 다른 OmniAuth 공급자로 GitLab에 로그인합니다.
  2. 오른쪽 상단에서 아바타를 선택합니다.
  3. Edit profile을 선택합니다.
  4. 왼쪽 사이드바에서 Access > Password and authentication을 선택합니다.
  5. Service sign-in 섹션에서 Google과 같은 OmniAuth 공급자를 선택합니다.
  6. 공급자로 리디렉션됩니다. GitLab을 승인하면 다시 GitLab으로 리디렉션됩니다.

이제 선택한 OmniAuth 공급자를 사용하여 GitLab에 로그인할 수 있습니다.

OmniAuth로 로그인할 때 기존 계정 연결하기#

히스토리
  • GitLab 19.3에서 link_omniauth_to_existing_user_on_login이라는 이름의 기능 플래그와 함께 도입되었습니다. GitLab.com에서 활성화되어 있습니다.
  • GitLab 19.4에서 일반 공급(GA)되었습니다. 기능 플래그 link_omniauth_to_existing_user_on_login이 제거되었습니다.

이메일 주소가 기존 GitLab 계정과 일치하는 OmniAuth 공급자로 로그인하면, GitLab은 로그인 오류를 표시하는 대신 해당 공급자를 기존 계정에 연결하도록 안내합니다.

auto_link_user가 활성화되어 있으면 로그인 흐름 없이 자동으로 연결됩니다.

안내형 연결 흐름은 다음과 같이 작동합니다.

  1. OmniAuth 공급자로 로그인을 시도합니다.
  2. GitLab은 공급자로부터 받은 이메일 주소가 기존 계정과 일치함을 감지합니다.
  3. 다음 안내와 함께 로그인 페이지로 리디렉션됩니다. "<provider> 계정의 이메일 주소로 이미 계정이 존재합니다. 기존 자격 증명으로 로그인하여 <provider> 계정을 연결합니다."
  4. 사용자 이름과 비밀번호 같은 기존 자격 증명으로 로그인합니다.
  5. GitLab이 Authorize identity provider link 페이지를 표시합니다.
  6. Authorize를 선택합니다.

GitLab은 기본 이메일과 확인된 보조 이메일 주소를 모두 대상으로 이메일 주소를 일치시킵니다. 연결 후에는 OmniAuth 공급자를 사용하여 GitLab에 로그인할 수 있습니다.

로그인하여 기존 계정의 소유권을 증명한 후에만 연결이 설정되므로, 이 흐름은 이메일 일치만으로 계정을 연결하는 auto_link_user보다 더 안전합니다.

가져오기 소스를 비활성화하지 않고 OmniAuth 공급자로 로그인 활성화 또는 비활성화#

관리자는 일부 OmniAuth 공급자에 대해 로그인을 활성화하거나 비활성화할 수 있습니다.

Note

기본적으로 config/gitlab.yml에 구성된 모든 OAuth 공급자에 대해 로그인이 활성화되어 있습니다.

OmniAuth 공급자를 활성화하거나 비활성화하려면 다음과 같이 합니다.

  1. 오른쪽 상단에서 Admin을 선택합니다.
  2. 왼쪽 사이드바에서 Settings > General을 선택합니다.
  3. Sign-in restrictions를 펼칩니다.
  4. Enabled OAuth authentication sources 섹션에서 활성화하거나 비활성화할 각 공급자의 체크박스를 선택하거나 선택 해제합니다.

OmniAuth 비활성화#

OmniAuth는 기본적으로 활성화되어 있습니다. 다만 OmniAuth는 공급자가 구성되고 활성화된 경우에만 작동합니다.

OmniAuth 공급자를 개별적으로 비활성화했는데도 문제가 발생하면 구성 파일을 수정하여 OmniAuth 하위 시스템 전체를 비활성화할 수 있습니다.

gitlab_rails['omniauth_enabled'] = false
omniauth:
  enabled: false

기존 사용자를 OmniAuth 사용자에 연결#

이메일 주소가 일치하면 OmniAuth 사용자를 기존 GitLab 사용자에 연결할 수 있습니다. 두 가지 방법을 사용할 수 있습니다.

  • 자동 연결(auto_link_user): GitLab이 로그인 시 사용자의 별도 작업 없이 OmniAuth 아이덴티티를 일치하는 계정에 자동으로 연결합니다.
  • 안내형 연결: auto_link_user가 비활성화되어 있으면 GitLab은 아이덴티티를 연결하기 전에 사용자에게 기존 자격 증명으로 로그인하여 소유권을 확인하도록 요청합니다. 자세한 내용은 OmniAuth로 로그인할 때 기존 계정 연결하기를 참고합니다.

자동 연결#

이메일 주소가 일치할 때 OmniAuth 사용자를 기존 GitLab 사용자에 자동으로 연결하려면, auto_link_user를 활성화합니다.

다음 예시는 OpenID Connect 공급자와 Google OAuth 공급자에 대해 자동 연결을 활성화합니다.

gitlab_rails['omniauth_auto_link_user'] = ["openid_connect", "google_oauth2"]
omniauth:
  auto_link_user: ["openid_connect", "google_oauth2"]

이 자동 연결 활성화 방법은 SAML을 제외한 모든 공급자에서 작동합니다. SAML에 대해 자동 연결을 활성화하려면 SAML 설정 안내를 참고합니다.

외부 공급자 목록 만들기#

외부 OmniAuth 공급자 목록을 정의할 수 있습니다. 목록에 있는 공급자를 통해 계정을 생성하거나 GitLab에 로그인하는 사용자는 내부 프로젝트에 접근할 수 없으며 외부 사용자로 표시됩니다.

외부 공급자 목록을 정의하려면 공급자의 전체 이름을 사용합니다. 예를 들어 Google은 google_oauth2입니다. 공급자 이름은 지원되는 공급자 표의 OmniAuth provider name 열을 참고합니다.

Note

외부 공급자 목록에서 OmniAuth 공급자를 제거하는 경우, 이 로그인 방법을 사용하는 사용자의 계정이 완전한 내부 계정으로 업그레이드되도록 수동으로 업데이트해야 합니다.

gitlab_rails['omniauth_external_providers'] = ['saml', 'google_oauth2']
omniauth:
  external_providers: ['saml', 'google_oauth2']

OmniAuth 사용자 프로필 최신 상태로 유지하기#

히스토리
  • GitLab 17.9에서 job_title 및 organization 속성이 도입되었습니다.
Note

일부 공급자는 이러한 속성을 동기화하기 위해 추가 구성이 필요합니다. 예를 들어 SAML 공급자는 프로필 속성 매핑이 필요합니다.

선택한 OmniAuth 공급자로부터 프로필 동기화를 활성화할 수 있습니다. 다음 사용자 속성을 조합하여 동기화할 수 있습니다.

  • name
  • email
  • job_title
  • location
  • organization

LDAP를 사용하여 인증하는 경우 사용자의 이름과 이메일은 항상 동기화됩니다.

  1. /etc/gitlab/gitlab.rb 파일을 편집합니다.

    gitlab_rails['omniauth_sync_profile_from_provider'] = ['saml', 'google_oauth2']
    gitlab_rails['omniauth_sync_profile_attributes'] = ['name', 'email', 'job_title', 'location', 'organization']
    
  2. 파일을 저장하고 GitLab을 재구성합니다.

    sudo gitlab-ctl reconfigure
    
  1. Helm 값을 내보냅니다.

    helm get values gitlab > values.yaml
    
  2. values.yaml을 편집합니다.

    global:
      appConfig:
        omniauth:
          syncProfileFromProvider: ['saml', 'google_oauth2']
          syncProfileAttributes: ['name', 'email', 'job_title', 'location', 'organization']
    
  3. 파일을 저장하고 새 값을 적용합니다.

    helm upgrade -f values.yaml gitlab gitlab/gitlab
    
  1. docker-compose.yml 파일을 편집합니다.

    version: "3.6"
    services:
      gitlab:
        environment:
          GITLAB_OMNIBUS_CONFIG: |
            gitlab_rails['omniauth_sync_profile_from_provider'] = ['saml', 'google_oauth2']
            gitlab_rails['omniauth_sync_profile_attributes'] = ['name', 'email', 'job_title', 'location', 'organization']
    
  2. 파일을 저장하고 GitLab을 재시작합니다.

    docker compose up -d
    
  1. /home/git/gitlab/config/gitlab.yml 파일을 편집합니다.

    production: &base
      omniauth:
        sync_profile_from_provider: ['saml', 'google_oauth2']
        sync_profile_attributes: ['name', 'email', 'job_title', 'location', 'organization']
    
  2. 파일을 저장하고 GitLab을 재시작합니다.

    # For systems running systemd
    sudo systemctl restart gitlab.target
    
    # For systems running SysV init
    sudo service gitlab restart
    

2단계 인증 우회#

특정 OmniAuth 공급자를 사용하면 사용자는 2단계 인증(2FA) 없이 로그인할 수 있습니다.

2FA를 우회하려면 다음 중 하나를 수행합니다.

  • 배열을 사용하여 허용되는 공급자를 정의합니다(예: ['saml', 'google_oauth2']).
  • 모든 공급자를 허용하려면 true를, 허용하지 않으려면 false를 지정합니다.

이 옵션은 이미 2FA를 사용하는 공급자에 대해서만 구성해야 합니다. 기본값은 false입니다.

이 구성은 SAML에는 적용되지 않습니다.

gitlab_rails['omniauth_allow_bypass_two_factor'] = ['saml', 'google_oauth2']
omniauth:
  allow_bypass_two_factor: ['saml', 'google_oauth2']

공급자로 자동 로그인#

GitLab 구성에 auto_sign_in_with_provider 설정을 추가하여 로그인 요청을 인증을 위해 OmniAuth 공급자로 리디렉션할 수 있습니다. 이렇게 하면 로그인 전에 공급자를 선택할 필요가 없어집니다.

예를 들어 Azure v2 통합에 대해 자동 로그인을 활성화하려면 다음과 같이 합니다.

gitlab_rails['omniauth_auto_sign_in_with_provider'] = 'azure_activedirectory_v2'
omniauth:
  auto_sign_in_with_provider: azure_activedirectory_v2

모든 로그인 시도가 OmniAuth 공급자로 리디렉션되므로 로컬 자격 증명으로는 로그인할 수 없다는 점에 유의합니다. OmniAuth 사용자 중 최소 한 명은 반드시 관리자여야 합니다.

https://gitlab.example.com/users/sign_in?auto_sign_in=false로 이동하여 자동 로그인을 우회할 수도 있습니다.

사용자 지정 OmniAuth 공급자 아이콘 사용#

지원되는 대부분의 공급자에는 렌더링된 로그인 버튼에 사용되는 내장 아이콘이 포함되어 있습니다.

자체 아이콘을 사용하려면 이미지가 64 x 64픽셀로 렌더링되도록 최적화되어 있는지 확인한 다음, 다음 두 가지 방법 중 하나로 아이콘을 재정의합니다.

  • 사용자 지정 이미지 경로 제공:

    1. GitLab 서버 도메인 외부에서 이미지를 호스팅하는 경우 콘텐츠 보안 정책이 이미지 파일에 대한 접근을 허용하도록 구성되어 있는지 확인합니다.
    2. GitLab 설치 방법에 따라 GitLab 구성 파일에 사용자 지정 icon 매개변수를 추가합니다. OpenID Connect 공급자의 예시는 OpenID Connect OmniAuth 공급자를 참고합니다.
  • 구성 파일에 이미지 직접 포함: 다음 예시는 Base64로 인코딩된 이미지 버전을 만들며, 이를 Data URL을 통해 제공할 수 있습니다.

    1. GNU base64 명령(예: base64 -w 0 <logo.png>)으로 이미지 파일을 인코딩합니다. 이 명령은 한 줄의 <base64-data> 문자열을 반환합니다.

    2. Base64로 인코딩된 데이터를 GitLab 구성 파일의 사용자 지정 icon 매개변수에 추가합니다.

      omniauth:
        providers:
          - { name: '...'
              icon: 'data:image/png;base64,<base64-data>'
              # Additional parameters removed for readability
            }
      

앱 또는 구성 변경#

GitLab의 OAuth는 동일한 외부 인증·인가 공급자를 여러 공급자로 설정하는 것을 지원하지 않으므로, 공급자나 앱을 변경하는 경우 GitLab 구성과 사용자 식별 정보를 동시에 업데이트해야 합니다. 예를 들어 saml과 azure_activedirectory_v2는 설정할 수 있지만 동일한 구성에 두 번째 azure_activedirectory_v2를 추가할 수는 없습니다.

이 안내는 GitLab이 extern_uid를 저장하고 이것이 사용자 인증에 사용되는 유일한 데이터인 모든 인증 방식에 적용됩니다.

공급자 내에서 앱을 변경할 때 사용자의 extern_uid가 바뀌지 않는다면 GitLab 구성만 업데이트하면 됩니다.

구성을 교체하려면 다음과 같이 합니다.

  1. gitlab.rb 파일에서 공급자 구성을 변경합니다.
  2. 이전 공급자에 대한 아이덴티티가 GitLab에 있는 모든 사용자의 extern_uid를 업데이트합니다.

extern_uid를 찾으려면 기존 사용자의 현재 extern_uid를 확인하여 동일한 사용자에 대해 현재 공급자의 해당 필드와 일치하는 ID를 찾습니다.

extern_uid를 업데이트하는 방법은 두 가지입니다.

  • Users API를 사용합니다. 공급자 이름과 새 extern_uid를 전달합니다.

  • Rails 콘솔을 사용합니다.

    Identity.where(extern_uid: 'old-id').update!(extern_uid: 'new-id')
    

알려진 문제#

지원되는 대부분의 OmniAuth 공급자는 HTTP를 통한 Git 비밀번호 인증을 지원하지 않습니다. 해결 방법으로 개인 액세스 토큰을 사용하여 인증할 수 있습니다.