正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

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とクライアントのシークレットキーが必要です:

  1. GitHubにサインインします。
  2. 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を有効にする

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

  2. 次の情報を使用して、GitLabの設定ファイルを編集します:

    GitHubの設定GitLabの設定ファイルの値説明
    Client ID(クライアントID)YOUR_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から自己署名SSL証明書を使用したインポートに失敗する

自己署名証明書を使用して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サーバーで、グローバル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
  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. サインインに利用するサービスセクションで、Connect to GitHub(GitHubに接続)を選択します。