第 3 章 使用 GitHub 进行身份验证
使用 GitHub 或 GitHub Enterprise 验证用户:
3.1. 启用使用 GitHub 进行身份验证
要使用 GitHub 验证用户,请在 Red Hat Developer Hub 中启用 GitHub 身份验证供应商。
先决条件
- 您 添加了自定义 Developer Hub 应用程序配置,并有足够的权限来修改它。
- 在 GitHub 中有足够的权限来创建和管理 GitHub 应用程序。
流程
要允许 Developer Hub 使用 GitHub 进行身份验证,请创建一个 GitHub 应用程序。选择 GitHub 应用程序而不是使用精细的权限,可以更好地控制应用程序可访问的存储库,并使用简短令牌。
使用以下配置注册 GitHub 应用程序:
- GitHub App name :输入用于标识 GitHub 应用程序的唯一名称,如 < Red Hat Developer Hub>- <GUID>。
-
主页 URL: 您的 Developer Hub URL:
https:// <my_developer_hub_url>
. -
授权回调 URL :您的 Developer Hub 身份验证后端 URL:
https:// <my_developer_hub_url> /api/auth/github/handler/frame
. -
Webhook URL: 您的 Developer Hub URL:
https:// <my_developer_hub_url>
. - Webhook secret :提供强大的 secret。
存储库权限 :
启用对以下的只读访问权限
:- 管理
- 提交状态
- 内容
- Dependabot 警报
- 部署
- 拉取请求
Webhook
提示如果您计划使用 GitHub API 进行更改,请确保启用
Read 和 write
权限,而不是只读
。
- 根据您的需要切换其他权限。
机构权限 :
-
启用对 成员的只读访问权限
。
-
-
对于 何处可以安装此 GitHub 应用程序?,请选择 only
on this account
。
-
在 General
Clients secrets 部分中,点 Generate a new client secret。 -
在 General
Private key 部分中,点 Generate a private key。 - 在 Install App 选项卡中,选择要安装 GitHub App 的帐户。
为下一步保存以下值:
- App ID
- 客户端 ID
- 客户端 secret
- 私钥
- Webhook secret
要将 GitHub 凭证添加到 Developer Hub 中,请将以下键/值对添加到 Developer Hub secret 中:
AUTH_GITHUB_APP_ID
- 输入保存 的应用程序 ID。
AUTH_GITHUB_CLIENT_ID
- 输入保存 的客户端 ID。
GITHUB_ORGANIZATION
- 输入您的 GitHub 机构名称,如 ' <your_github_organization_name>'。
GITHUB_ORG_URL
-
输入
$GITHUB_HOST_DOMAIN/$GITHUB_ORGANIZATION
。 GITHUB_CLIENT_SECRET
- 输入保存 的客户端 Secret。
GITHUB_PRIVATE_KEY_FILE
- 输入保存 的私钥。
GITHUB_WEBHOOK_URL
-
输入您的 Developer Hub URL:
https:// <my_developer_hub_url>
。 GITHUB_WEBHOOK_SECRET
- 输入保存的 Webhook secret。
要设置 GitHub 身份验证供应商并在 Developer Hub 自定义配置中启用与 GitHub API 集成,请编辑自定义 Developer Hub ConfigMap,如
app-config-rhdh
,并将以下行添加到app-config-rhdh.yaml
内容:app-config-rhdh.yaml
片段带有强制字段,以启用使用 GitHub 进行身份验证auth: environment: production providers: github: production: clientId: ${AUTH_GITHUB_CLIENT_ID} clientSecret: ${AUTH_GITHUB_CLIENT_SECRET} integrations: github: - host: ${GITHUB_HOST_DOMAIN} apps: - appId: ${AUTH_GITHUB_APP_ID} clientId: ${AUTH_GITHUB_CLIENT_ID} clientSecret: ${GITHUB_CLIENT_SECRET} webhookUrl: ${GITHUB_WEBHOOK_URL} webhookSecret: ${GITHUB_WEBHOOK_SECRET} privateKey: | ${GITHUB_PRIVATE_KEY_FILE} signInPage: github
环境:production
-
将环境标记为
production
,以在 Developer Hub 主页中隐藏 Guest 登录。 clientId
,clientSecret
,host
,appId
,webhookUrl
,webhookSecret
,privateKey
- 使用您在 GitHub 中创建并配置了 OpenShift 作为 secret 的 Developer Hub 应用程序信息。
sigInPage: github
- 将 GitHub 提供程序启用为默认登录提供程序。
可选: 考虑添加以下可选字段:
dangerouslyAllowSignInWithoutUserInCatalog: true
要启用身份验证,而无需在 Developer Hub 软件目录中置备用户。
警告使用
dangerouslyAllowSignInWithoutUserInCatalog
探索 Developer Hub 功能,但不要在生产环境中使用它。带有可选字段的
app-config-rhdh.yaml
片段来允许软件目录中不存在验证用户auth: environment: production providers: github: production: clientId: ${AUTH_GITHUB_CLIENT_ID} clientSecret: ${AUTH_GITHUB_CLIENT_SECRET} integrations: github: - host: ${GITHUB_HOST_DOMAIN} apps: - appId: ${AUTH_GITHUB_APP_ID} clientId: ${AUTH_GITHUB_CLIENT_ID} clientSecret: ${GITHUB_CLIENT_SECRET} webhookUrl: ${GITHUB_WEBHOOK_URL} webhookSecret: ${GITHUB_WEBHOOK_SECRET} privateKey: | ${GITHUB_PRIVATE_KEY_FILE} signInPage: github dangerouslyAllowSignInWithoutUserInCatalog: true
callbackUrl
GitHub 在启动 OAuth 流时使用的回调 URL,例如: < your_intermediate_service_url/handler >。当 Developer Hub 不是直接接收器时定义它,如当您为多个 Developer Hub 实例使用一个 OAuth 应用程序时。
带有可选
enterpriseInstanceUrl
字段的app-config-rhdh.yaml
片段auth: providers: github: production: callbackUrl: <your_intermediate_service_url/handler>
提示要启用与不同身份验证供应商的 GitHub 集成,请完成以下配置:
-
将 GitHub 提供程序添加到现有
auth
部分。 -
保留您的身份验证提供程序配置中
signInPage
部分。
带有强制字段的
app-config-rhdh.yaml
片段启用 GitHub 集成并使用不同的身份验证供应商auth: environment: production providers: github: production: clientId: ${AUTH_GITHUB_CLIENT_ID} clientSecret: ${AUTH_GITHUB_CLIENT_SECRET} <your_other_authentication_providers_configuration> integrations: github: - host: ${GITHUB_HOST_DOMAIN} apps: - appId: ${AUTH_GITHUB_APP_ID} clientId: ${AUTH_GITHUB_CLIENT_ID} clientSecret: ${GITHUB_CLIENT_SECRET} webhookUrl: ${GITHUB_WEBHOOK_URL} webhookSecret: ${GITHUB_WEBHOOK_SECRET} privateKey: | ${GITHUB_PRIVATE_KEY_FILE} signInPage: <your_main_authentication_provider>
验证
- 进入 Developer Hub 登录页面。
- 您的 Developer Hub 登录页面显示 使用 GitHub 的 Sign in,并且 Guest 用户登录被禁用。
- 使用 GitHub 登录。