GitHub을 OAuth 2.0 인증 공급자로 사용하기
당신은 GitHub.com 및 GitHub Enterprise를 GitLab 인스턴스에 통합할 수 있습니다. GitHub에서 프로젝트를 가져오거나 GitHub 자격 증명으로 GitLab에 로그인할 수 있습니다.
GitHub에서 OAuth 앱 생성
GitHub OmniAuth 공급자를 활성화하려면 GitHub에서 OAuth 2.0 클라이언트 ID 및 클라이언트 시크릿이 필요합니다.
- GitHub에 로그인합니다.
-
OAuth 앱 생성
및 다음 정보를 제공합니다:
- GitLab 인스턴스의 URL(예:
https://gitlab.example.com
). - 인증 콜백 URL, 예:
https://gitlab.example.com/users/auth
. GitLab 인스턴스가 기본 포트를 사용하지 않는 경우 포트 번호를 포함합니다.
- GitLab 인스턴스의 URL(예:
보안 취약점 확인
일부 통합에 대해 OAuth 2 암시적 리다이렉트
취약점이 GitLab 계정을 compromise할 수 있습니다.
이 취약점을 완화하기 위해, 인증 콜백 URL에 /users/auth
를 추가하십시오.
그러나 우리가 알기로는 GitHub은 redirect_uri
의 하위 도메인 부분을 확인하지 않습니다.
따라서 웹사이트의 모든 하위 도메인에서의 하위 도메인 타케오버, XSS 또는 오픈 리다이렉트가
암시적 리다이렉트 공격을 가능하게 할 수 있습니다.
GitLab에서 GitHub OAuth 활성화
-
일반 설정을 구성하여
github
를 단일 로그인 공급자로 추가합니다. 이는 기존의 GitLab 계정이 없는 사용자를 위한 JIT(Just-In-Time) 계정 프로비저닝을 가능하게 합니다. -
다음 정보를 사용하여 GitLab 구성 파일을 편집합니다:
GitHub 설정 GitLab 구성 파일의 값 설명 클라이언트 ID YOUR_APP_ID
OAuth 2.0 클라이언트 ID 클라이언트 시크릿 YOUR_APP_SECRET
OAuth 2.0 클라이언트 시크릿 URL https://github.example.com/
GitHub 배포 URL -
Linux 패키지 설치의 경우:
-
/etc/gitlab/gitlab.rb
파일을 엽니다.GitHub.com의 경우, 다음 섹션을 업데이트합니다:
gitlab_rails['omniauth_providers'] = [ { name: "github", # label: "Provider name", # 선택적 로그인 버튼 레이블, 기본값은 "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", # 선택적 로그인 버튼 레이블, 기본값은 "GitHub" app_id: "YOUR_APP_ID", app_secret: "YOUR_APP_SECRET", url: "https://github.example.com/", args: { scope: "user:email" } } ]
-
파일을 저장하고 GitLab 재구성 합니다.
-
-
직접 컴파일한 설치의 경우:
-
config/gitlab.yml
파일을 엽니다.GitHub.com의 경우, 다음 섹션을 업데이트합니다:
- { name: 'github', # label: 'Provider name', # 선택적 로그인 버튼 레이블, 기본값은 "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', # 선택적 로그인 버튼 레이블, 기본값은 "GitHub" app_id: 'YOUR_APP_ID', app_secret: 'YOUR_APP_SECRET', url: "https://github.example.com/", args: { scope: 'user:email' } }
-
파일을 저장하고 GitLab 재시작 합니다.
-
-
-
GitLab 로그인 페이지를 새로 고칩니다. GitHub 아이콘이 로그인 양식 아래에 표시됩니다.
-
아이콘을 선택합니다. GitHub에 로그인하고 GitLab 어플리케이션을 승인합니다.
문제 해결
self-signed 인증서로부터의 GitHub Enterprise 가져오기 실패
self-signed 인증서를 사용하여 GitHub Enterprise에서 프로젝트를 가져오면 가져오기가 실패합니다.
이 문제를 해결하려면 SSL 검증을 비활성화해야 합니다:
-
구성 파일에서
verify_ssl
을false
로 설정합니다.-
Linux 패키지 설치의 경우:
gitlab_rails['omniauth_providers'] = [ { name: "github", # label: "Provider name", # 선택적 로그인 버튼 레이블, 기본값은 "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', # 선택적 로그인 버튼 레이블, 기본값은 "GitHub" app_id: 'YOUR_APP_ID', app_secret: 'YOUR_APP_SECRET', url: "https://github.example.com/", verify_ssl: false, args: { scope: 'user:email' } }
-
-
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
-
-
Linux 패키지를 사용하여 설치한 경우 GitLab 재구성, 직접 컴파일한 설치한 경우 GitLab 재시작 합니다.
GitHub Enterprise를 사용하여 로그인하면 500 에러가 발생합니다.
이 오류는 GitLab 인스턴스와 GitHub Enterprise 사이의 네트워크 연결 문제로 인해 발생할 수 있습니다.
연결 문제를 확인하려면 다음을 수행하세요:
-
GitLab 서버의
production.log
로 이동하여 다음 오류를 찾습니다.plaintext Faraday::ConnectionFailed (execution expired)
-
레일즈 콘솔을 시작하고 다음 명령을 실행합니다.
<github_url>
을 GitHub Enterprise 인스턴스의 URL로 바꿉니다.ruby uri = URI.parse("https://<github_url>") # 여기에 실제 GitHub URL을 넣어주세요 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))
-
유사한
execution expired
오류가 반환되면, 이는 연결 문제로 인한 오류임을 확인합니다. GitLab 서버가 GitHub Enterprise 인스턴스에 도달할 수 있는지 확인하세요.
기존 GitLab 계정이 없는 경우 GitHub 계정을 사용하여 로그인하는 것은 허용되지 않습니다.
GitLab에 로그인하면 다음 오류가 표시됩니다.
기존 GitLab 계정 없이 GitHub 계정을 사용하여 로그인하는 것은 허용되지 않습니다. 먼저 GitLab 계정을 생성한 다음 GitHub 계정에 연결하세요
이 문제를 해결하려면 GitLab에서 GitHub 로그인을 활성화해야 합니다:
- 왼쪽 사이드바에서 아바타를 선택합니다.
- 프로필 편집을 선택합니다.
- 왼쪽 사이드바에서 계정을 선택합니다.
- 서비스 로그인 섹션에서 GitHub에 연결을 선택합니다.