GitHubをOAuth 2.0認証プロバイダとして使用します。

GitLabインスタンスをGitHub.comやGitHub Enterpriseとインテグレーションすることができます。GitHubからプロジェクトをインポートしたり、GitHubの認証情報でGitLabにサインインすることができます。

GitHubでOAuthアプリを作成

GitHub OmniAuth プロバイダを有効にするには、GitHub の OAuth 2.0 クライアント ID とクライアントシークレットが必要です:

  1. GitHub にサインインします。
  2. OAuthアプリを作成し、以下の情報を入力してください:
    • GitLab インスタンスの URL。https://gitlab.example.com など。
    • 作成者のコールバックURL、例えばhttps://gitlab.example.com/users/auth 。GitLab インスタンスがデフォルト以外のポートを使っている場合は、ポート番号も含めてください。

セキュリティ脆弱性のチェック

インテグレーションによっては、OAuth 2の隠密リダイレクトの脆弱性によってGitLabアカウントが危険にさらされる可能性があります。この脆弱性を緩和するには、作成者のコールバックURLに/users/auth を追加してください。

しかし、私たちが知る限り、GitHubはredirect_uri のサブドメイン部分を検証しません。そのため、サブドメインの乗っ取り、XSS、ウェブサイトの任意のサブドメインでのオープンリダイレクトによって、秘密のリダイレクト攻撃が可能になる可能性があります。

GitLabでGitHub OAuthを有効にする

  1. 共通設定を構成して、シングルサインオンプロバイダとしてgithub 。これにより、既存のGitLabアカウントを持っていないユーザーのためのJust-In-Timeアカウントプロビジョニングが可能になります。

  2. 以下の情報を使ってGitLab設定ファイルを編集します:

    GitHubの設定GitLab設定ファイルの値説明
    クライアントIDYOUR_APP_IDOAuth 2.0のクライアントID
    クライアントシークレットYOUR_APP_SECRETOAuth 2.0 クライアントのシークレット
    URLhttps://github.example.com/GitHubデプロイURL
    • Linuxパッケージ・インストールの場合:

      1. /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" }
          }
        ]
        
      2. ファイルを保存し、GitLab を再設定します。

    • セルフコンパイルによるインストールの場合:

      1. 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' } }
        
      2. ファイルを保存し、GitLabを再起動します。

  3. GitLabのサインインページを更新します。サインインフォームの下にGitHubアイコンが表示されるはずです。

  4. アイコンを選択してください。GitHubにサインインし、GitLabアプリケーションを作成します。

トラブルシューティング

自己署名証明書を使った GitHub Enterprise からのインポートに失敗します。

GitHub Enterprise から自己署名証明書を使ってプロジェクトをインポートすると、インポートに失敗します。

このイシューを解決するには、SSL 認証を無効にする必要があります:

  1. 設定ファイルでverify_sslfalse に設定します。

    • 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' } }
      
  2. GitLab サーバーのグローバル GitsslVerify オプションを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
      
  3. Linuxパッケージを使ってインストールした場合はGitLabを再設定し、セルフコンパイルでインストールした場合はGitLabを再起動します。

GitHub Enterpriseを使ってサインインすると500エラーが返されます。

このエラーは、GitLabインスタンスとGitHub Enterprise間のネットワーク接続に問題があるために発生する可能性があります。

接続性の問題を確認するには、以下の手順に従ってください:

  1. GitLabサーバーのproduction.log 、以下のエラーを探してください:

    Faraday::ConnectionFailed (execution expired)
    
  2. 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))
    
  3. 同様の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サインインを有効化する必要があります:

  1. 左のサイドバーで、自分のアバターを選択してください。
  2. プロフィールの編集を選択します。
  3. 左サイドバーで「アカウント」を選択します。
  4. Service sign-inセクションで、Connect to GitHubを選択します。