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 계정을 침해할 수 있습니다.
이 취약점을 완화하려면 권한 부여 콜백 URL에 /users/auth
를 추가하십시오.
그러나 우리가 알기로는 GitHub은 redirect_uri
의 하위 도메인 부분을 유효성 검사하지 않습니다.
따라서 웹사이트의 어떤 하위 도메인에서도 하위 도메인 탈취, XSS 또는 오픈 리다이렉트가 있으면 이스코팅 리다이렉트 공격이 가능해질 수 있습니다.
GitLab에서 GitHub OAuth 활성화
-
공통 설정을 구성하여
github
를 단일 로그인 제공자로 추가합니다. 이렇게 하면 기존 GitLab 계정이 없는 사용자를 위해 즉시 계정 프로비저닝이 가능해집니다. -
다음 정보를 사용하여 GitLab 구성 파일을 수정합니다.
GitHub 설정 GitLab 구성 파일의 값 설명 클라이언트 ID YOUR_APP_ID
OAuth 2.0 클라이언트 ID 클라이언트 비밀번호 YOUR_APP_SECRET
OAuth 2.0 클라이언트 비밀번호 URL https://github.example.com/
GitHub 배포 URL -
리눅스 패키지 설치의 경우:
-
/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 응용 프로그램을 승인합니다.
문제 해결
자체 서명 인증서를 사용하는 GitHub Enterprise에서 가져오기가 실패하는 경우
자체 서명 인증서를 사용하는 GitHub Enterprise에서 프로젝트를 가져올 때 가져오기가 실패합니다.
이 문제를 해결하려면 SSL 검증을 비활성화해야 합니다:
-
구성 파일에서
verify_ssl
을false
로 설정합니다.-
리눅스 패키지 설치의 경우:
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 이상의 경우:
gitaly['gitconfig'] = [ {key: "http.sslVerify", value: "false"}, ]
-
GitLab 15.2 이하 버전(레거시 방법)에서 실행 중인 리눅스 패키지 설치의 경우:
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
-
-
리눅스 패키지를 사용하여 설치한 경우 GitLab을 다시 구성하거나, 직접 컴파일한 설치의 경우 GitLab을 다시 시작합니다.
GitHub Enterprise를 사용하여 로그인하면 500 오류가 발생합니다.
네트워크 연결 문제로 인해이 오류가 발생할 수 있습니다. 귀하의 GitLab 인스턴스와 GitHub Enterprise 간의 네트워크 연결 문제를 확인하려면 다음을 수행하세요:
-
귀하의 GitLab 서버에서
production.log
로 이동하여 다음 오류를 찾으세요:Faraday::ConnectionFailed (execution expired)
-
레일스 콘솔을 시작하고 다음 명령을 실행하세요.
<github_url>
을 귀하의 GitHub Enterprise 인스턴스의 URL로 대체하세요.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 로그인을 활성화해야 합니다:
- 왼쪽 사이드바에서 아바타를 선택합니다.
- 프로필 편집을 선택합니다.
- 왼쪽 사이드바에서 계정을 선택합니다.
- Service sign-in 섹션에서 Connect to GitHub을 선택합니다.