第 4 章 使用 GitHub 进行身份验证


使用 GitHub 或 GitHub Enterprise 验证用户:

4.1. 启用使用 GitHub 进行身份验证

要使用 GitHub 验证用户,请在 Red Hat Developer Hub 中启用 GitHub 身份验证供应商。

先决条件

流程

  1. 要允许 Developer Hub 使用 GitHub 进行身份验证,请创建一个 GitHub 应用程序。选择 GitHub 应用程序而不是使用精细的权限,可以更好地控制应用程序可访问的存储库,并使用简短令牌。

    1. 使用以下配置注册 GitHub 应用程序:

      • GitHub App name :输入用于标识 GitHub 应用程序的唯一名称,如 < Red Hat Developer Hub>- <GUID>
      • 主页 URL: 您的 Developer Hub URL: https:// &lt;my_developer_hub_url>.
      • 授权回调 URL :您的 Developer Hub 身份验证后端 URL: https:// &lt;my_developer_hub_url&gt; /api/auth/github/handler/frame.
      • Webhook URL: 您的 Developer Hub URL: https:// &lt;my_developer_hub_url>.
      • Webhook secret :提供强大的 secret。
      • 存储库权限

        • 启用对以下的只读访问权限

          • 管理
          • 提交状态
          • 内容
          • Dependabot 警报
          • 部署
          • 拉取请求
          • Webhook

            提示

            如果您计划使用 GitHub API 进行更改,请确保启用 Read 和 write 权限,而不是 只读

        • 根据您的需要切换其他权限。
      • 机构权限

        • 启用对 成员的只读访问权限
      • 对于 何处可以安装此 GitHub 应用程序?,请选择 only on this account
    2. General Clients secrets 部分中,点 Generate a new client secret
    3. General Private key 部分中,点 Generate a private key
    4. Install App 选项卡中,选择要安装 GitHub App 的帐户。
    5. 为下一步保存以下值:

      • App ID
      • 客户端 ID
      • 客户端 secret
      • 私钥
      • Webhook secret
  2. 要将 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
  3. .要设置 GitHub 身份验证供应商并在 Developer Hub 自定义配置中启用与 GitHub API 集成,请编辑自定义 Developer Hub 配置映射,如 my-rhdh-app-config,并将以下行添加到 app-config.yaml 文件内容中:

    app-config.yaml 文件片段带有强制字段,以启用使用 GitHub 进行身份验证

    auth:
      environment: production 
    1
    
      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: github 
    3

    1
    将环境标记为 生产环境,并在 Developer Hub 登录页面中禁用 Guest login 选项。
    2
    应用 Developer Hub secret 中配置的 GitHub 凭证。
    3
    启用 GitHub 供应商作为 Developer Hub 登录供应商。
    1. 可选: 考虑添加以下可选字段:

      callbackUrl

      GitHub 在启动 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>

验证

  1. 进入 Developer Hub 登录页面。
  2. 您的 Developer Hub 登录页面显示 使用 GitHub 的 Sign in,并且 Guest 用户登录被禁用。
  3. 使用 GitHub 登录。
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部