GitHubをOAuth 2.0認証プロバイダとして使用します。
GitLabインスタンスをGitHub.comやGitHub Enterpriseとインテグレーションすることができます。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アカウントを持っていないユーザーのためのJust-In-Timeアカウントプロビジョニングが可能になります。
- 
以下の情報を使ってGitLab設定ファイルを編集します: GitHubの設定 GitLab設定ファイルの値 説明 クライアントID YOUR_APP_IDOAuth 2.0のクライアントID クライアントシークレット YOUR_APP_SECRETOAuth 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", # 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" } } ]
- 
ファイルを保存し、GitLab を再設定します。 
 
- 
- 
セルフコンパイルによるインストールの場合: - 
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' } }
- 
ファイルを保存し、GitLabを再起動します。 
 
- 
 
- 
- 
GitLabのサインインページを更新します。サインインフォームの下にGitHubアイコンが表示されるはずです。 
- 
アイコンを選択してください。GitHubにサインインし、GitLabアプリケーションを作成します。 
トラブルシューティング
自己署名証明書を使った GitHub Enterprise からのインポートに失敗します。
GitHub Enterprise から自己署名証明書を使ってプロジェクトをインポートすると、インポートに失敗します。
このイシューを解決するには、SSL 認証を無効にする必要があります:
- 
設定ファイルで verify_sslをfalseに設定します。- 
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' } }
 
- 
- 
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、以下のエラーを探してください:Faraday::ConnectionFailed (execution expired)
- 
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))
- 
同様の 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サインインを有効化する必要があります:
- 左のサイドバーで、自分のアバターを選択してください。
- プロフィールの編集を選択します。
- 左サイドバーで「アカウント」を選択します。
- Service sign-inセクションで、Connect to GitHubを選択します。
