InfoGrab Docs

GitHub를 OAuth 2.0 인증 공급자로 사용

요약

GitLab 인스턴스를 GitHub.com 및 GitHub Enterprise와 통합할 수 있습니다. GitHub OmniAuth 공급자를 활성화하려면 GitHub에서 OAuth 2.0 클라이언트 ID와 클라이언트 시크릿이 필요합니다:

GitLab 인스턴스를 GitHub.com 및 GitHub Enterprise와 통합할 수 있습니다. GitHub에서 프로젝트를 가져오거나 GitHub 자격 증명으로 GitLab에 로그인할 수 있습니다.

GitHub에서 OAuth 앱 생성#

GitHub OmniAuth 공급자를 활성화하려면 GitHub에서 OAuth 2.0 클라이언트 ID와 클라이언트 시크릿이 필요합니다:

  1. GitHub에 로그인합니다.
  2. OAuth 앱을 생성하고 다음 정보를 제공합니다:
    • https://gitlab.example.com과 같은 GitLab 인스턴스의 URL.
    • https://gitlab.example.com/users/auth와 같은 인증 콜백 URL. GitLab 인스턴스가 기본이 아닌 포트를 사용하는 경우 포트 번호를 포함합니다.

보안 취약점 확인#

일부 통합의 경우 OAuth 2 코버트 리디렉션 취약점이 GitLab 계정을 위협할 수 있습니다. 이 취약점을 완화하려면 인증 콜백 URL에 /users/auth를 추가합니다.

그러나 GitHub은 redirect_uri의 서브도메인 부분을 검증하지 않습니다. 따라서 웹사이트의 서브도메인 중 하나에서 서브도메인 인수, XSS, 또는 열린 리디렉션이 코버트 리디렉션 공격을 가능하게 할 수 있습니다.

GitLab에서 GitHub OAuth 활성화#

  1. github를 단일 로그온(SSO) 공급자로 추가하기 위해 공통 설정을 구성합니다. 이는 기존 GitLab 계정이 없는 사용자에 대한 Just-In-Time 계정 프로비저닝을 활성화합니다.

  2. 다음 정보를 사용하여 GitLab 구성 파일을 편집합니다:

    GitHub 설정 GitLab 구성 파일의 값 설명
    Client ID YOUR_APP_ID OAuth 2.0 클라이언트 ID
    Client secret YOUR_APP_SECRET OAuth 2.0 클라이언트 시크릿
    URL https://github.example.com/ GitHub 배포 URL
    • Linux 패키지 설치의 경우:

      1. /etc/gitlab/gitlab.rb 파일을 엽니다.

        GitHub.com의 경우 다음 섹션을 업데이트합니다:

        gitlab_rails['omniauth_providers'] = [
          {
            name: "github",
            # label: "Provider name", # optional label for login button, defaults to "GitHub"
            app_id: "YOUR_APP_ID",
            app_secret: "YOUR_APP_SECRET",
            args: { scope: "user:email" }
          }
        ]
        

        GitHub Enterprise의 경우 다음 섹션을 업데이트하고 https://github.example.com/을 GitHub URL로 교체합니다:

        gitlab_rails['omniauth_providers'] = [
          {
            name: "github",
            # label: "Provider name", # optional label for login button, defaults to "GitHub"
            app_id: "YOUR_APP_ID",
            app_secret: "YOUR_APP_SECRET",
            url: "https://github.example.com/",
            args: { scope: "user:email" }
          }
        ]
        
      2. 파일을 저장하고 GitLab을 재구성합니다.

    • 소스 컴파일 설치의 경우:

      1. config/gitlab.yml 파일을 엽니다.

        GitHub.com의 경우 다음 섹션을 업데이트합니다:

        - { name: 'github',
            # label: 'Provider name', # optional label for login button, defaults to "GitHub"
            app_id: 'YOUR_APP_ID',
            app_secret: 'YOUR_APP_SECRET',
            args: { scope: 'user:email' } }
        

        GitHub Enterprise의 경우 다음 섹션을 업데이트하고 https://github.example.com/을 GitHub URL로 교체합니다:

        - { name: 'github',
            # label: 'Provider name', # optional label for login button, defaults to "GitHub"
            app_id: 'YOUR_APP_ID',
            app_secret: 'YOUR_APP_SECRET',
            url: "https://github.example.com/",
            args: { scope: 'user:email' } }
        
      2. 파일을 저장하고 GitLab을 재시작합니다.

  3. GitLab 로그인 페이지를 새로 고칩니다. 로그인 양식 아래에 GitHub 아이콘이 표시되어야 합니다.

  4. 아이콘을 선택합니다. GitHub에 로그인하고 GitLab 애플리케이션을 인증합니다.

문제 해결#

자체 서명 인증서가 있는 GitHub Enterprise에서 가져오기 실패#

자체 서명 인증서를 사용하여 GitHub Enterprise에서 프로젝트를 가져올 때 가져오기가 실패합니다.

이 문제를 해결하려면 SSL 확인을 비활성화해야 합니다:

  1. 구성 파일에서 verify_sslfalse로 설정합니다.

    • Linux 패키지 설치의 경우:

      gitlab_rails['omniauth_providers'] = [
        {
          name: "github",
          # label: "Provider name", # optional label for login button, defaults to "GitHub"
          app_id: "YOUR_APP_ID",
          app_secret: "YOUR_APP_SECRET",
          url: "https://github.example.com/",
          verify_ssl: false,
          args: { scope: "user:email" }
        }
      ]
      
    • 소스 컴파일 설치의 경우:

      - { name: 'github',
          # label: 'Provider name', # optional label for login button, defaults to "GitHub"
          app_id: 'YOUR_APP_ID',
          app_secret: 'YOUR_APP_SECRET',
          url: "https://github.example.com/",
          verify_ssl: false,
          args: { scope: 'user:email' } }
      
  2. GitLab 서버에서 전역 Git sslVerify 옵션을 false로 변경합니다.

    • GitLab 15.3 이상을 실행하는 Linux 패키지 설치의 경우:

      gitaly['gitconfig'] = [
         {key: "http.sslVerify", value: "false"},
      ]
      
    • GitLab 15.2 이하를 실행하는 Linux 패키지 설치의 경우(레거시 방법):

      omnibus_gitconfig['system'] = { "http" => ["sslVerify = false"] }
      
    • GitLab 15.3 이상을 실행하는 소스 컴파일 설치의 경우, Gitaly 구성(gitaly.toml)을 편집합니다:

      [[git.config]]
      key = "http.sslVerify"
      value = "false"
      
    • GitLab 15.2 이하를 실행하는 소스 컴파일 설치의 경우(레거시 방법):

      git config --global http.sslVerify false
      
  3. Linux 패키지를 사용하여 설치한 경우 GitLab 재구성하거나, 소스 컴파일 설치인 경우 GitLab 재시작합니다.

GitHub Enterprise를 사용하여 로그인 시 500 오류 발생#

이 오류는 GitLab 인스턴스와 GitHub Enterprise 간의 네트워크 연결 이슈로 인해 발생할 수 있습니다.

연결 이슈를 확인하려면:

  1. GitLab 서버의 production.log로 이동하고 다음 오류를 찾습니다:

    Faraday::ConnectionFailed (execution expired)
    
  2. Rails 콘솔 시작하고 다음 명령을 실행합니다. <github_url>을 GitHub Enterprise 인스턴스의 URL로 교체합니다:

    uri = URI.parse("https://<github_url>") # replace `GitHub-URL` with the real one here
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    http.verify_mode = 1
    response = http.request(Net::HTTP::Get.new(uri.request_uri))
    
  3. 유사한 execution expired 오류가 반환되면 오류가 연결 이슈로 인해 발생한 것을 확인합니다. GitLab 서버가 GitHub Enterprise 인스턴스에 도달할 수 있는지 확인합니다.

기존 GitLab 계정 없이 GitHub 계정을 사용하여 로그인이 허용되지 않음#

GitLab에 로그인할 때 다음 오류가 발생합니다:

Signing in using your GitHub account without a pre-existing
GitLab account is not allowed. Create a GitLab account first,
and then connect it to your GitHub account

이 문제를 해결하려면 GitLab에서 GitHub 로그인을 활성화해야 합니다:

  1. 오른쪽 상단 모서리에서 아바타를 선택합니다.
  2. Edit profile을 선택합니다.
  3. 왼쪽 사이드바에서 Access > Password and authentication을 선택합니다.
  4. Service sign-in 섹션에서 Connect to GitHub를 선택합니다.

GitHub를 OAuth 2.0 인증 공급자로 사용

Tier: Free, Premium, Ultimate
Offering: GitLab Self-Managed
원문 보기
요약

GitLab 인스턴스를 GitHub.com 및 GitHub Enterprise와 통합할 수 있습니다. GitHub OmniAuth 공급자를 활성화하려면 GitHub에서 OAuth 2.0 클라이언트 ID와 클라이언트 시크릿이 필요합니다:

GitLab 인스턴스를 GitHub.com 및 GitHub Enterprise와 통합할 수 있습니다. GitHub에서 프로젝트를 가져오거나 GitHub 자격 증명으로 GitLab에 로그인할 수 있습니다.

GitHub에서 OAuth 앱 생성#

GitHub OmniAuth 공급자를 활성화하려면 GitHub에서 OAuth 2.0 클라이언트 ID와 클라이언트 시크릿이 필요합니다:

  1. GitHub에 로그인합니다.
  2. OAuth 앱을 생성하고 다음 정보를 제공합니다:
    • https://gitlab.example.com과 같은 GitLab 인스턴스의 URL.
    • https://gitlab.example.com/users/auth와 같은 인증 콜백 URL. GitLab 인스턴스가 기본이 아닌 포트를 사용하는 경우 포트 번호를 포함합니다.

보안 취약점 확인#

일부 통합의 경우 OAuth 2 코버트 리디렉션 취약점이 GitLab 계정을 위협할 수 있습니다. 이 취약점을 완화하려면 인증 콜백 URL에 /users/auth를 추가합니다.

그러나 GitHub은 redirect_uri의 서브도메인 부분을 검증하지 않습니다. 따라서 웹사이트의 서브도메인 중 하나에서 서브도메인 인수, XSS, 또는 열린 리디렉션이 코버트 리디렉션 공격을 가능하게 할 수 있습니다.

GitLab에서 GitHub OAuth 활성화#

  1. github를 단일 로그온(SSO) 공급자로 추가하기 위해 공통 설정을 구성합니다. 이는 기존 GitLab 계정이 없는 사용자에 대한 Just-In-Time 계정 프로비저닝을 활성화합니다.

  2. 다음 정보를 사용하여 GitLab 구성 파일을 편집합니다:

    GitHub 설정 GitLab 구성 파일의 값 설명
    Client ID YOUR_APP_ID OAuth 2.0 클라이언트 ID
    Client secret YOUR_APP_SECRET OAuth 2.0 클라이언트 시크릿
    URL https://github.example.com/ GitHub 배포 URL
    • Linux 패키지 설치의 경우:

      1. /etc/gitlab/gitlab.rb 파일을 엽니다.

        GitHub.com의 경우 다음 섹션을 업데이트합니다:

        gitlab_rails['omniauth_providers'] = [
          {
            name: "github",
            # label: "Provider name", # optional label for login button, defaults to "GitHub"
            app_id: "YOUR_APP_ID",
            app_secret: "YOUR_APP_SECRET",
            args: { scope: "user:email" }
          }
        ]
        

        GitHub Enterprise의 경우 다음 섹션을 업데이트하고 https://github.example.com/을 GitHub URL로 교체합니다:

        gitlab_rails['omniauth_providers'] = [
          {
            name: "github",
            # label: "Provider name", # optional label for login button, defaults to "GitHub"
            app_id: "YOUR_APP_ID",
            app_secret: "YOUR_APP_SECRET",
            url: "https://github.example.com/",
            args: { scope: "user:email" }
          }
        ]
        
      2. 파일을 저장하고 GitLab을 재구성합니다.

    • 소스 컴파일 설치의 경우:

      1. config/gitlab.yml 파일을 엽니다.

        GitHub.com의 경우 다음 섹션을 업데이트합니다:

        - { name: 'github',
            # label: 'Provider name', # optional label for login button, defaults to "GitHub"
            app_id: 'YOUR_APP_ID',
            app_secret: 'YOUR_APP_SECRET',
            args: { scope: 'user:email' } }
        

        GitHub Enterprise의 경우 다음 섹션을 업데이트하고 https://github.example.com/을 GitHub URL로 교체합니다:

        - { name: 'github',
            # label: 'Provider name', # optional label for login button, defaults to "GitHub"
            app_id: 'YOUR_APP_ID',
            app_secret: 'YOUR_APP_SECRET',
            url: "https://github.example.com/",
            args: { scope: 'user:email' } }
        
      2. 파일을 저장하고 GitLab을 재시작합니다.

  3. GitLab 로그인 페이지를 새로 고칩니다. 로그인 양식 아래에 GitHub 아이콘이 표시되어야 합니다.

  4. 아이콘을 선택합니다. GitHub에 로그인하고 GitLab 애플리케이션을 인증합니다.

문제 해결#

자체 서명 인증서가 있는 GitHub Enterprise에서 가져오기 실패#

자체 서명 인증서를 사용하여 GitHub Enterprise에서 프로젝트를 가져올 때 가져오기가 실패합니다.

이 문제를 해결하려면 SSL 확인을 비활성화해야 합니다:

  1. 구성 파일에서 verify_sslfalse로 설정합니다.

    • Linux 패키지 설치의 경우:

      gitlab_rails['omniauth_providers'] = [
        {
          name: "github",
          # label: "Provider name", # optional label for login button, defaults to "GitHub"
          app_id: "YOUR_APP_ID",
          app_secret: "YOUR_APP_SECRET",
          url: "https://github.example.com/",
          verify_ssl: false,
          args: { scope: "user:email" }
        }
      ]
      
    • 소스 컴파일 설치의 경우:

      - { name: 'github',
          # label: 'Provider name', # optional label for login button, defaults to "GitHub"
          app_id: 'YOUR_APP_ID',
          app_secret: 'YOUR_APP_SECRET',
          url: "https://github.example.com/",
          verify_ssl: false,
          args: { scope: 'user:email' } }
      
  2. GitLab 서버에서 전역 Git sslVerify 옵션을 false로 변경합니다.

    • GitLab 15.3 이상을 실행하는 Linux 패키지 설치의 경우:

      gitaly['gitconfig'] = [
         {key: "http.sslVerify", value: "false"},
      ]
      
    • GitLab 15.2 이하를 실행하는 Linux 패키지 설치의 경우(레거시 방법):

      omnibus_gitconfig['system'] = { "http" => ["sslVerify = false"] }
      
    • GitLab 15.3 이상을 실행하는 소스 컴파일 설치의 경우, Gitaly 구성(gitaly.toml)을 편집합니다:

      [[git.config]]
      key = "http.sslVerify"
      value = "false"
      
    • GitLab 15.2 이하를 실행하는 소스 컴파일 설치의 경우(레거시 방법):

      git config --global http.sslVerify false
      
  3. Linux 패키지를 사용하여 설치한 경우 GitLab 재구성하거나, 소스 컴파일 설치인 경우 GitLab 재시작합니다.

GitHub Enterprise를 사용하여 로그인 시 500 오류 발생#

이 오류는 GitLab 인스턴스와 GitHub Enterprise 간의 네트워크 연결 이슈로 인해 발생할 수 있습니다.

연결 이슈를 확인하려면:

  1. GitLab 서버의 production.log로 이동하고 다음 오류를 찾습니다:

    Faraday::ConnectionFailed (execution expired)
    
  2. Rails 콘솔 시작하고 다음 명령을 실행합니다. <github_url>을 GitHub Enterprise 인스턴스의 URL로 교체합니다:

    uri = URI.parse("https://<github_url>") # replace `GitHub-URL` with the real one here
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    http.verify_mode = 1
    response = http.request(Net::HTTP::Get.new(uri.request_uri))
    
  3. 유사한 execution expired 오류가 반환되면 오류가 연결 이슈로 인해 발생한 것을 확인합니다. GitLab 서버가 GitHub Enterprise 인스턴스에 도달할 수 있는지 확인합니다.

기존 GitLab 계정 없이 GitHub 계정을 사용하여 로그인이 허용되지 않음#

GitLab에 로그인할 때 다음 오류가 발생합니다:

Signing in using your GitHub account without a pre-existing
GitLab account is not allowed. Create a GitLab account first,
and then connect it to your GitHub account

이 문제를 해결하려면 GitLab에서 GitHub 로그인을 활성화해야 합니다:

  1. 오른쪽 상단 모서리에서 아바타를 선택합니다.
  2. Edit profile을 선택합니다.
  3. 왼쪽 사이드바에서 Access > Password and authentication을 선택합니다.
  4. Service sign-in 섹션에서 Connect to GitHub를 선택합니다.