将 GitHub 作为 OAuth 2.0 认证提供商
您可以将极狐GitLab 实例与 GitHub.com 和 GitHub Enterprise 集成。这种集成使用户能够从 GitHub 导入项目,或使用他们的 GitHub 账户登录到您的极狐GitLab 实例。
在 GitHub 中创建 OAuth app
如要启用 GitHub OmniAuth 提供商,您需要一个 GitHub OAuth 2.0 客户端 ID 和客户端密钥:
- 登录 GitHub。
-
创建 OAuth App并提供如下信息:
- 您的极狐GitLab 实例 URL,比如
https://gitlab.example.com
。 - 认证回调 URL,比如
https://gitlab.example.com/users/auth
。如果您的极狐GitLab 实例使用非默认端口,请包含端口号。
- 您的极狐GitLab 实例 URL,比如
安全漏洞检查
某些集成可能会危及极狐GitLab 账户。为了帮助缓解此 OAuth 2 隐蔽重定向漏洞,请将 /users/auth
附加到授权回调 URL 的末尾。
但是,GitHub 似乎并没有验证 redirect_uri
的子域部分。这意味着您网站的任何子域上的子域接管、XSS 或开放重定向都可能启用隐蔽重定向攻击。
在极狐GitLab 上启用 GitHub OAuth
- 配置通用设置将
github
添加为单点登录提供商。这为没有现有极狐GitLab 账户的用户启用了即时账户配置功能。 -
编辑极狐GitLab 配置文件并使用如下信息:
在 GitHub 设置 在极狐GitLab 配置文件中替换 描述 Client ID YOUR_APP_ID
OAuth 2 客户端 ID Client Secret YOUR_APP_SECRET
OAuth 2 客户端 Secret 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 企业版,更新如下部分并将
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 企业版,更新如下部分并将
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 验证。
要修复此问题,您必须禁用 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
。-
对 15.3 及以后的 Linux 软件包安装的实例上运行:
gitaly['gitconfig'] = [ {key: "http.sslVerify", value: "false"}, ]
-
对 15.2 及以前的 Linux 软件包安装实例上运行:
omnibus_gitconfig['system'] = { "http" => ["sslVerify = false"] }
-
对使用源代码安装且版本在 15.3 及以后的实例, 编辑 Gitaly 配置 (
gitaly.toml
):[[git.config]] key = "http.sslVerify" value = "false"
-
对使用源代码安装且版本在 15.2 及以前的实例上运行:
git config --global http.sslVerify false
-
-
如果您使用 Linux 软件包安装实例,则重新配置极狐GitLab,如果您使用的是源代码安装,则重启极狐GitLab。
尝试通过 GitHub Enterprise 登录极狐GitLab 时出现 Error 500
当您的极狐GitLab 实例和 GitHub Enterprise 之间出现网络链接问题时就会遇到此问题。
要想测试链接问题:
-
在您的极狐GitLab 服务器上找到
production.log
并查看如下错误信息:Faraday::ConnectionFailed (execution expired)
-
启动 rails 控制台并运行如下命令。用您的 GitHub Enterprise URL 替换
<github_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 账户登录
如果登录时出现如下错误信息:
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
- 在右上角,选择您的头像。
- 选择 编辑个人资料。
- 在左侧边栏中,选择 账户。
- 在 服务登录 部分,选择 连接到 GitHub。