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_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", # 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を選択します。