GitHubをOAuth 2.0認証プロバイダーとして使用する
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab Self-Managed
GitLabインスタンスをGitHub.comおよびGitHub Enterpriseとインテグレーションできます。GitHubからプロジェクトをインポートしたり、GitHubの認証情報を使用してGitLabにサインインしたりできます。
GitHubでOAuthアプリを作成します。
GitHub OmniAuthプロバイダーを有効にするには、GitHubからのOAuth 2.0クライアントIDとクライアントのシークレットキーが必要です:
- GitHubにサインインします。
- OAuthアプリを作成し、次の情報を入力します:
https://gitlab.example.comなどのGitLabインスタンスのURL。https://gitlab.example.com/users/authなどの認可コールバックURL。GitLabインスタンスがデフォルト以外のポートを使用している場合は、ポート番号を含めます。
セキュリティの脆弱性をチェック
一部のインテグレーションでは、OAuth 2 covert redirectの脆弱性により、GitLabアカウントが侵害される可能性があります。この脆弱性を軽減するには、/users/authを認可コールバックURLに追加します。
ただし、GitHubはredirect_uriのサブドメイン部分を検証しません。したがって、Webサイトのサブドメインのサブドメインの乗っ取り、XSS、またはオープンリダイレクトにより、covert redirect攻撃が可能になる可能性があります。
GitLabでGitHub OAuthを有効にする
共通設定で、
githubをシングルサインオンプロバイダーとして追加します。これにより、既存のGitLabアカウントを持たないユーザーに対して、Just-In-Timeアカウントプロビジョニングが有効になります。次の情報を使用して、GitLabの設定ファイルを編集します:
GitHubの設定 GitLabの設定ファイルの値 説明 Client ID(クライアント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から自己署名SSL証明書を使用したインポートに失敗する
自己署名証明書を使用して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サインインをアクティブにする必要があります:
- 左側のサイドバーで、自分のアバターを選択します。新しいナビゲーションをオンにしている場合、このボタンは右上隅にあります。
- プロファイルの編集を選択します。
- 左側のサイドバーで、アカウントを選択します。
- サインインに利用するサービスセクションで、Connect to GitHub(GitHubに接続)を選択します。