第 4 章 使用 GitHub 进行身份验证
使用 GitHub 或 GitHub Enterprise 验证用户:
4.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 配置映射,如
my-rhdh-app-config,并将以下行添加到app-config.yaml文件内容中:app-config.yaml文件片段带有强制字段,以启用使用 GitHub 进行身份验证auth: environment: production1 providers: github: production: clientId: ${AUTH_GITHUB_CLIENT_ID}2 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: github3 - 1
- 将环境标记为
生产环境,并在 Developer Hub 登录页面中禁用 Guest login 选项。 - 2
- 应用 Developer Hub secret 中配置的 GitHub 凭证。
- 3
- 启用 GitHub 供应商作为 Developer Hub 登录供应商。
可选: 考虑添加以下可选字段:
callbackUrlGitHub 在启动 OAuth 流时使用的回调 URL,例如: < your_intermediate_service_url/handler >。当 Developer Hub 不是直接接收器时定义它,如当您为多个 Developer Hub 实例使用一个 OAuth 应用程序时。
带有可选
enterpriseInstanceUrl字段的app-config.yaml文件片段auth: providers: github: production: callbackUrl: <your_intermediate_service_url/handler>
sessionDuration用户会话的寿命。以
ms库格式输入持续时间(如 '24h'、'2 days')、ISO 持续时间或 "human duration",如代码中使用的。带有可选
sessionDuration字段的app-config-rhdh.yaml片段auth: providers: github: production: sessionDuration: { hours: 24 }signIn解析器-
身份验证成功后,中的用户签名必须解析为 Developer Hub 目录中的现有用户。为了更好地为您的用例安全地匹配用户,请考虑配置特定的解析器。输入解析器列表以覆盖默认解析器:
usernameMatchingUserEntityName。
身份验证提供程序尝试每个登录解析器按顺序尝试,直到成功为止,如果没有成功,则失败。
警告在 production 模式中,只配置一个解析器以确保用户被安全地匹配。
resolver输入登录解析器名称。可用的解析器:
-
usernameMatchingUserEntityName -
preferredUsernameMatchingUserEntityName -
emailMatchingUserEntityProfileEmail
-
dangerouslyAllowSignInWithoutUserInCatalog: true配置登录解析器以绕过 Developer Hub 软件目录中的用户置备要求。
警告使用
dangerouslyAllowSignInWithoutUserInCatalog探索 Developer Hub 功能,但不要在生产环境中使用它。带有可选字段的
app-config.yaml文件片段,允许软件目录中缺少的用户签名auth: environment: production providers: github: production: clientId: ${AUTH_GITHUB_CLIENT_ID} clientSecret: ${AUTH_GITHUB_CLIENT_SECRET} signIn: resolvers: - resolver: usernameMatchingUserEntityName dangerouslyAllowSignInWithoutUserInCatalog: true 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
要启用与不同身份验证供应商的 GitHub 集成,请完成以下配置:
-
将 GitHub 提供程序添加到现有
auth部分。 -
保留您的身份验证提供程序配置中
signInPage部分。
app-config.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 登录。