身份验证


Red Hat Developer Hub 1.4

在 Red Hat Developer Hub 中配置外部服务的身份验证

Red Hat Customer Content Services

摘要

作为 Red Hat Developer Hub 平台工程师,您可以管理其他用户的身份验证,以满足您机构的特定需求。

前言

根据机构的安全策略,您可能需要在授予用户访问资源(如 Red Hat Developer Hub)前识别和授权用户。

在 Developer Hub 中,身份验证和授权是两个独立的进程:

  1. 身份验证定义了用户身份,并将此信息传递给 Developer Hub。请阅读以下章节,以在 Developer Hub 中配置身份验证。
  2. 授权定义经过身份验证的用户可以访问或在 Developer Hub 中执行的操作。请参阅 授权
不建议在生产环境中使用

要探索 Developer Hub 功能,您可以使 guest 用户跳过配置身份验证和授权,以 guest 用户身份登录,并访问所有功能。

Developer Hub 中的身份验证系统由外部身份验证供应商处理。

Developer Hub 支持以下身份验证供应商:

  • Red Hat Single-Sign On (RHSSO)
  • GitHub
  • Microsoft Azure

要识别 Developer Hub 中的用户,请配置:

  • 一个(以及只有一个)身份验证供应商用于登录和识别。
  • (可选)用于识别的额外身份验证供应商,为用户身份添加更多信息,或者启用对其他外部资源的访问。

对于每个身份验证供应商,设置身份验证供应商和 Developer Hub 需要通信的共享 secret,首先在身份验证供应商中,然后在 Developer Hub 中进行设置。

Developer Hub 将用户身份信息存储在 Developer Hub 软件目录中。

不建议在生产环境中使用

要探索身份验证系统,并使用没有授权策略的 Developer Hub,您可以绕过 Developer Hub 软件目录,并在不置备 Developer Hub 软件目录的情况下开始使用 Developer Hub。

要获取、存储和更新其他用户信息,如组或团队所有权,使用这些数据来定义授权策略,在 Developer Hub 软件目录中置备用户和组。

重要

Developer Hub 使用单向同步系统将身份验证系统的用户和组置备到 Developer Hub 软件目录。因此,使用 Developer Hub Web UI 或 REST API 删除用户和组可能会具有意外的后果。

第 1 章 使用 Guest 用户进行身份验证

要探索 Developer Hub 功能,您可以跳过配置身份验证和授权。您可以将 Developer Hub 配置为以 Guest 用户身份登录并访问 Developer Hub 功能。

基于 Operator 的安装后,您可以将 Developer Hub 配置为以 Guest 用户身份登录并访问 Developer Hub 功能。

先决条件

流程

  • 要在 Developer Hub 自定义配置中启用 guest 用户,请使用以下内容编辑 Developer Hub 应用程序配置

    app-config.yaml 片段

    auth:
      environment: development
      providers:
        guest:
          dangerouslyAllowOutsideDevelopment: true
    Copy to Clipboard Toggle word wrap

验证

  1. 进入 Developer Hub 登录页面。
  2. 要使用 Guest 用户帐户登录,请单击 Guest 标题中的 Enter
  3. 在 Developer Hub Settings 页面中,您的配置集名称为 Guest
  4. 您可以使用 Developer Hub 功能。

在基于 Helm 的安装中,您可以将 Developer Hub 配置为以 Guest 用户身份登录并访问 Developer Hub 功能。

流程

  • 要在 Developer Hub 自定义配置中启用 guest 用户,请使用以下内容配置 Red Hat Developer Hub Helm Chart

    Red Hat Developer Hub Helm Chart 配置片段

    upstream:
      backstage:
        appConfig:
          app:
            baseUrl: 'https://{{- include "janus-idp.hostname" . }}'
          auth:
            environment: development
            providers:
              guest:
                dangerouslyAllowOutsideDevelopment: true
    Copy to Clipboard Toggle word wrap

验证

  1. 进入 Developer Hub 登录页面。
  2. 要使用 Guest 用户帐户登录,请单击 Guest 标题中的 Enter
  3. 在 Developer Hub Settings 页面中,您的配置集名称为 Guest
  4. 您可以使用 Developer Hub 功能。
注意

RHSSO 7.6 作为身份验证提供程序已弃用。您可以继续使用 RHSSO,直到其维护支持结束为止。如需更多信息,请参阅 RHSSO 生命周期日期。作为替代方案,请考虑迁移到红帽构建的 Keycloak (RHBK)。

使用红帽构建的 Keycloak (RHBK)验证用户身份:

要使用 Red Hat Build of Keycloak (RHBK)验证用户,请在 Red Hat Developer Hub 中启用 OpenID Connect (OIDC)身份验证供应商。

先决条件

流程

  1. 要允许 Developer Hub 使用 RHBK 进行身份验证,请完成 RHBK 中的步骤,创建 realm 和用户并保护第一个应用程序:

    1. 使用现有域,或使用不同的名称(如 < my_ realm > )创建一个 域。为下一步保存值:

      • RHBK 域基本 URL,例如: < your_rhbk_URL> /realms/ <your_realm>
    2. 要在 RHBK 中注册您的 Developer Hub,请在创建域中注册 第一个应用程序,使用以下内容保护第一个应用程序

      1. 客户端 ID :不同的客户端 ID,如 < RHDH>
      2. 有效的重定向 URI :设置为 OIDC 处理程序 URL: https:// <RHDH_URL&gt; /api/auth/oidc/handler/frame.
      3. 导航到 Credentials 选项卡,再复制 Client secret
      4. 保存下一步的值:

        • 客户端 ID
        • Client Secret
    3. 要准备验证步骤,请在同一域中获取现有用户 或创建用户的凭证 信息。保存验证步骤的用户凭证信息。
  2. 要将 RHSSO 凭证添加到 Developer Hub 中,请将以下键/值对添加到 Developer Hub secret 中:

    AUTH_OIDC_CLIENT_ID
    输入保存 的客户端 ID
    AUTH_OIDC_CLIENT_SECRET
    输入保存 的客户端 Secret
    AUTH_OIDC_METADATA_URL
    输入保存的 RHBK 域基础 URL
  3. 要在 Developer Hub 自定义配置中设置 RHBK 身份验证供应商,请编辑自定义 Developer Hub ConfigMap,如 app-config-rhdh,并将以下行添加到 app-config.yaml 内容:

    app-config.yaml 片段带有强制字段,以启用 RHBK 身份验证

    auth:
      environment: production
      providers:
        oidc:
          production:
            metadataUrl: ${AUTH_OIDC_METADATA_URL}
            clientId: ${AUTH_OIDC_CLIENT_ID}
            clientSecret: ${AUTH_OIDC_CLIENT_SECRET}
            prompt: auto
    signInPage: oidc
    Copy to Clipboard Toggle word wrap

    环境:production
    将环境标记为 production,以在 Developer Hub 主页中隐藏 Guest 登录。
    metadataUrl, clientId, clientSecret
    使用您的 secret 配置 OIDC 供应商。
    sigInPage: oidc
    将 OIDC 供应商作为默认登录供应商启用。
    提示: auto
    要允许身份提供程序自动决定是否提示输入凭证,或者在存在活跃的 RHSSO 会话时绕过登录重定向。
    注意

    如果没有设置 prompt: auto,则身份提供程序默认为 prompt: none,这假设您已经登录,并在没有活跃会话的情况下拒绝登录请求。

    callbackUrl

    RHBK 回调 URL。

带有可选 callbackURL 字段的 app-config.yaml 片段

auth:
  providers:
    oidc:
      production:
        callbackUrl: ${AUTH_OIDC_CALLBACK_URL}
Copy to Clipboard Toggle word wrap

tokenEndpointAuthMethod

令牌端点身份验证方法。

带有可选 tokenEndpointAuthMethod 字段的 app-config.yaml 片段

auth:
  providers:
    oidc:
      production:
        tokenEndpointAuthMethod: ${AUTH_OIDC_TOKEN_ENDPOINT_METHOD}
Copy to Clipboard Toggle word wrap

tokenSignedResponseAlg

令牌签名的响应算法。

带有可选 tokenSignedResponseAlg 字段的 app-config.yaml 片段

auth:
  providers:
    oidc:
      production:
        tokenSignedResponseAlg: ${AUTH_OIDC_SIGNED_RESPONSE_ALG}
Copy to Clipboard Toggle word wrap

scope

RHBK 范围.

带有可选 scope 字段的 app-config.yaml 片段

auth:
  providers:
    oidc:
      production:
        scope: ${AUTH_OIDC_SCOPE}
Copy to Clipboard Toggle word wrap

signIn.resolvers

声明性解析器覆盖默认解析器: emailLocalPartMatchingUserEntityName。身份验证提供程序尝试每个登录解析器,直到成功为止,如果不成功,则失败。

带有可选 callbackURL 字段的 app-config.yaml 片段

auth:
  providers:
    oidc:
      production:
        signIn:
          resolvers:
            - resolver: preferredUsernameMatchingUserEntityName
            - resolver: emailMatchingUserEntityProfileEmail
            - resolver: emailLocalPartMatchingUserEntityName
Copy to Clipboard Toggle word wrap

auth.backstageTokenExpiration

要从默认值一小时修改 Developer Hub 令牌过期,请注意,这指的是短期加密令牌的有效性,而不是会话持续时间。expiration 值必须在 10 分钟到 24 小时之间设置。

带有可选 auth.backstageTokenExpiration 字段的 app-config.yaml 片段

auth:
  backstageTokenExpiration: { minutes: <user_defined_value> }
Copy to Clipboard Toggle word wrap

安全考虑

如果因为频繁刷新令牌请求而发出多个有效的刷新令牌,旧的令牌将保持有效,直到它们过期。要增强安全性并防止旧令牌造成潜在的滥用,请在 RHBK 域中启用刷新令牌轮转策略。

  1. 在导航菜单的 Configure 部分中,单击 Realm Settings
  2. Realm Settings 页面,单击 Tokens 选项卡。
  3. Tokens 选项卡的 Refresh tokens 部分中,将 Revoke Refresh Token 切换到 Enabled 位置。

验证

  1. 进入 Developer Hub 登录页面。
  2. 您的 Developer Hub 签名页面显示 使用 OIDC 的 Sign in,并且 guest 用户登录被禁用。
  3. 使用保存 的用户名和密码 值使用 OIDC 登录。

流程

  • 要启用 RHBK 成员发现,请编辑自定义 Developer Hub ConfigMap,如 app-config-rhdh,并将以下行添加到 app-config.yaml 内容中:

    带有强制 keycloakOrg 字段的 app-config.yaml 片段

    dangerouslyAllowSignInWithoutUserInCatalog: false
    catalog:
      providers:
        keycloakOrg:
          default:
            baseUrl: ${AUTH_OIDC_METADATA_URL}
            clientId: ${AUTH_OIDC_CLIENT_ID}
            clientSecret: ${AUTH_OIDC_CLIENT_SECRET}
    Copy to Clipboard Toggle word wrap

    dangerouslyAllowSignInWithoutUserInCatalog: false
    只允许 Developer Hub 软件目录中存在的用户进行身份验证。
    baseUrl
    您的 RHBK 服务器 URL,在启用 RHBK 身份验证时定义。
    clientId
    RHBK 中的开发人员 Hub 应用程序客户端 ID,在启用 RHBK 身份验证时定义。
    clientSecret
    RHBK 中的开发人员 Hub 应用程序客户端机密,在启用 RHBK 身份验证时定义。

    可选: 考虑添加以下可选字段:

    realm

    要同步的域。默认值: master

    带有可选 realm 字段的 app-config.yaml 片段

    catalog:
      providers:
        keycloakOrg:
          default:
            realm: master
    Copy to Clipboard Toggle word wrap

    loginRealm

    用于验证的域。默认值: master

    带有可选 loginRealm 字段的 app-config.yaml 片段

    catalog:
      providers:
        keycloakOrg:
          default:
            loginRealm: master
    Copy to Clipboard Toggle word wrap

    userQuerySize

    同时查询的用户号。默认值 :100

    带有可选 userQuerySize 字段的 app-config.yaml 片段

    catalog:
      providers:
        keycloakOrg:
          default:
            userQuerySize: 100
    Copy to Clipboard Toggle word wrap

    groupQuerySize

    同时查询的组号。默认值 :100

    带有可选 groupQuerySize 字段的 app-config.yaml 片段

    catalog:
      providers:
        keycloakOrg:
          default:
            groupQuerySize: 100
    Copy to Clipboard Toggle word wrap

    schedule.frequency

    指定自定义调度频率。支持代码中使用的 cron、ISO 持续时间和"human 持续时间"。

    带有可选 schedule.frequency 字段的 app-config.yaml 片段

    catalog:
      providers:
        keycloakOrg:
          default:
            schedule:
              frequency: { hours: 1 }
    Copy to Clipboard Toggle word wrap

    schedule.timeout

    指定自定义超时。支持代码中使用的 ISO 持续时间和"human duration"。

    带有可选 schedule.timeout 字段的 app-config.yaml 片段

    catalog:
      providers:
        keycloakOrg:
          default:
            schedule:
              timeout: { minutes: 50 }
    Copy to Clipboard Toggle word wrap

    schedule.initialDelay

    指定自定义初始延迟。支持代码中使用的 ISO 持续时间和"human duration"。

    带有可选 schedule.initialDelay 字段的 app-config.yaml 片段

    catalog:
      providers:
        keycloakOrg:
          default:
            schedule:
              initialDelay: { seconds: 15}
    Copy to Clipboard Toggle word wrap

验证

  1. 检查控制台日志,以验证同步是否已完成。

    成功同步示例:

    {"class":"KeycloakOrgEntityProvider","level":"info","message":"Read 3 Keycloak users and 2 Keycloak groups in 1.5 seconds. Committing...","plugin":"catalog","service":"backstage","taskId":"KeycloakOrgEntityProvider:default:refresh","taskInstanceId":"bf0467ff-8ac4-4702-911c-380270e44dea","timestamp":"2024-09-25 13:58:04"}
    {"class":"KeycloakOrgEntityProvider","level":"info","message":"Committed 3 Keycloak users and 2 Keycloak groups in 0.0 seconds.","plugin":"catalog","service":"backstage","taskId":"KeycloakOrgEntityProvider:default:refresh","taskInstanceId":"bf0467ff-8ac4-4702-911c-380270e44dea","timestamp":"2024-09-25 13:58:04"}
    Copy to Clipboard Toggle word wrap

  2. 使用 RHBK 帐户登录。

要自定义 RHBK 用户和组如何映射到 Red Hat Developer Hub 实体,您可以创建一个使用 keycloakTransformerExtensionPoint 为 Keycloak 后端提供自定义用户和组转换器的后端模块。

流程

  1. 使用 yarn 新命令 创建一个新的 backend 模块。
  2. 将自定义用户和组转换器添加到 keycloakTransformerExtensionPoint 中。

    以下是如何定义 backend 模块的示例:

    plugins/<module-name>/src/module.ts

    import {
      GroupTransformer,
      keycloakTransformerExtensionPoint,
      UserTransformer,
    } from '@backstage-community/plugin-catalog-backend-module-keycloak';
    
    const customGroupTransformer: GroupTransformer = async (
      entity, // entity output from default parser
      realm, // Keycloak realm name
      groups, // Keycloak group representation
    ) => {
      /* apply transformations */
      return entity;
    };
    const customUserTransformer: UserTransformer = async (
      entity, // entity output from default parser
      user, // Keycloak user representation
      realm, // Keycloak realm name
      groups, // Keycloak group representation
    ) => {
      /* apply transformations */
      return entity;
    };
    
    export const keycloakBackendModuleTransformer = createBackendModule({
      pluginId: 'catalog',
      moduleId: 'keycloak-transformer',
      register(reg) {
        reg.registerInit({
          deps: {
            keycloak: keycloakTransformerExtensionPoint,
          },
          async init({ keycloak }) {
            keycloak.setUserTransformer(customUserTransformer);
            keycloak.setGroupTransformer(customGroupTransformer);
            /* highlight-add-end */
          },
        });
      },
    });
    Copy to Clipboard Toggle word wrap

    重要

    模块的 pluginId 必须设置为 catalog 以匹配 keycloak-backendpluginId ;否则,模块无法初始化。

  3. 将此新后端模块安装到 Developer Hub 后端中。

    backend.add(import(backstage-plugin-catalog-backend-module-keycloak-transformer))
    Copy to Clipboard Toggle word wrap

验证

  • Developer Hub 每次启动时都会导入用户和组。检查控制台日志,以验证同步是否已完成。

    成功同步示例:

    {"class":"KeycloakOrgEntityProvider","level":"info","message":"Read 3 Keycloak users and 2 Keycloak groups in 1.5 seconds. Committing...","plugin":"catalog","service":"backstage","taskId":"KeycloakOrgEntityProvider:default:refresh","taskInstanceId":"bf0467ff-8ac4-4702-911c-380270e44dea","timestamp":"2024-09-25 13:58:04"}
    {"class":"KeycloakOrgEntityProvider","level":"info","message":"Committed 3 Keycloak users and 2 Keycloak groups in 0.0 seconds.","plugin":"catalog","service":"backstage","taskId":"KeycloakOrgEntityProvider:default:refresh","taskInstanceId":"bf0467ff-8ac4-4702-911c-380270e44dea","timestamp":"2024-09-25 13:58:04"}
    Copy to Clipboard Toggle word wrap

  • 完成第一次导入后,导航到 Catalog 页面,再选择 User 来查看用户列表。
  • 当您选择用户时,您会看到从 RHBK 导入的信息。
  • 您可以选择组,查看列表,访问或查看从 RHBK 导入的信息。
  • 您可以使用 RHBK 帐户登录。

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

使用 GitHub 或 GitHub Enterprise 验证用户:

3.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. GeneralClients secrets 部分中,点 Generate a new client secret
    3. GeneralPrivate 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-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
    Copy to Clipboard Toggle word wrap

    环境: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
    Copy to Clipboard Toggle word wrap

    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>
    Copy to Clipboard Toggle word wrap

    提示

    要启用与不同身份验证供应商的 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>
    Copy to Clipboard Toggle word wrap

验证

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

3.2. 将用户从 GitHub 置备到软件目录

要验证用户,Red Hat Developer Hub 在软件目录中需要存在它们。考虑配置 Developer Hub 以根据调度将用户从 GitHub 置备到软件目录,而不是手动置备用户。

先决条件

流程

  • 要启用 GitHub 成员发现,请编辑自定义 Developer Hub ConfigMap,如 app-config-rhdh,并将以下行添加到 app-config.yaml 内容中:

    带有强制 github 字段的 app-config.yaml 片段

    dangerouslyAllowSignInWithoutUserInCatalog: false
    catalog:
      providers:
        github:
          providerId:
            organization: "${GITHUB_ORGANIZATION}"
            schedule:
              frequency:
                minutes: 30
              initialDelay:
                seconds: 15
              timeout:
                minutes: 15
        githubOrg:
          githubUrl: "${GITHUB_HOST_DOMAIN}"
          orgs: [ "${GITHUB_ORGANIZATION}" ]
          schedule:
            frequency:
              minutes: 30
            initialDelay:
              seconds: 15
            timeout:
              minutes: 15
    Copy to Clipboard Toggle word wrap

    dangerouslyAllowSignInWithoutUserInCatalog: false
    只允许 Developer Hub 软件目录中存在的用户进行身份验证。
    机构,githubUrl, 和 orgs
    使用您在 GitHub 中创建并配置了 OpenShift 作为 secret 的 Developer Hub 应用程序信息。
    schedule.frequency
    指定自定义调度频率。支持代码中使用的 cron、ISO 持续时间和"human 持续时间"。
    schedule.timeout
    指定自定义超时。支持代码中使用的 ISO 持续时间和"human duration"。
    schedule.initialDelay
    指定自定义初始延迟。支持代码中使用的 ISO 持续时间和"human duration"。

验证

  1. 检查控制台日志,以验证同步是否已完成。

    成功同步示例:

    {"class":"GithubMultiOrgEntityProvider","level":"info","message":"Reading GitHub users and teams for org: rhdh-dast","plugin":"catalog","service":"backstage","target":"https://github.com","taskId":"GithubMultiOrgEntityProvider:production:refresh","taskInstanceId":"801b3c6c-167f-473b-b43e-e0b4b780c384","timestamp":"2024-09-09 23:55:58"}
    {"class":"GithubMultiOrgEntityProvider","level":"info","message":"Read 7 GitHub users and 2 GitHub groups in 0.4 seconds. Committing...","plugin":"catalog","service":"backstage","target":"https://github.com","taskId":"GithubMultiOrgEntityProvider:production:refresh","taskInstanceId":"801b3c6c-167f-473b-b43e-e0b4b780c384","timestamp":"2024-09-09 23:55:59"}
    Copy to Clipboard Toggle word wrap

  2. 使用 GitHub 帐户登录。

第 4 章 使用 Microsoft Azure 进行身份验证

使用 Microsoft Azure 验证用户身份:

4.1. 使用 Microsoft Azure 启用身份验证

Red Hat Developer Hub 包括一个 Microsoft Azure 身份验证供应商,可以使用 OAuth 验证用户。

先决条件

  1. 您有在 Microsoft Azure 中注册应用程序的权限。

流程

  1. 要允许 Developer Hub 与 Microsoft Azure 进行身份验证,请在 Microsoft Azure 中创建 OAuth 应用程序

    1. 在 Azure 门户中 使用 配置创建新注册

      Name
      Azure 中的应用程序名称,如 < My Developer Hub>
    2. Home > App registrations > <My Developer Hub > > Manage &gt ; Authentication 页面中,使用以下配置添加平台

      重定向 URI
      输入 Developer Hub 中设置的后端身份验证 URI: https:// <my_developer_hub_url&gt; /api/auth/microsoft/handler/frame
      front-channel logout URL
      留空。
      隐式授权和混合流
      保留所有复选框都未清除。
    3. Home > App registrations &gt ; <My Developer Hub > > Manage &gt ; API permissions 页面中,添加 Permission,然后为 Microsoft Graph API 添加以下 委派权限

      • email
      • offline_access
      • openid
      • 配置集
      • user.Read
      • 您在本节和 app-config.yaml Developer Hub 配置文件中定义的 Microsoft Graph API 的可选自定义范围。

您的公司可能需要您授予 admin 同意这些权限。即使您的公司不需要管理员同意,您可能也要这样做,因为这意味着用户在第一次访问阶段时不需要单独同意。要授予管理员同意,目录管理员必须进入管理员同意页面,然后单击 COMPANY NAME 的 Grant admin consent

  1. Home > App registrations > < My Developer Hub > > Manage > Certificates & Secrets 页的 Client secrets 选项卡中,创建一个 New client secret
  2. 保存下一步:

    • 目录(租户)ID
    • 应用程序(客户端)ID
    • 应用程序(客户端)secret

      1. 要将 Microsoft Azure 凭证添加到 Developer Hub,请将以下键/值对添加到 Developer Hub secret 中:

        AUTH_AZURE_TENANT_ID
        输入您保存的目录 (租户)ID
        AUTH_AZURE_CLIENT_ID
        输入您保存的 应用程序(客户端)ID
        AUTH_AZURE_CLIENT_SECRET
        输入您保存的 应用程序(客户端)secret
      2. app-config.yaml 文件中设置 Microsoft Azure 身份验证供应商:

        app-config.yaml 文件片段

        auth:
          environment: production
          providers:
            microsoft:
              production:
                clientId: ${AUTH_AZURE_CLIENT_ID}
                clientSecret: ${AUTH_AZURE_CLIENT_SECRET}
                tenantId: ${AUTH_AZURE_TENANT_ID}
        signInPage: microsoft
        Copy to Clipboard Toggle word wrap

        环境:production
        将环境标记为 production,以在 Developer Hub 主页中隐藏 Guest 登录。
        clientId,clientSecrettenantId
        使用您在 Microsoft Azure 中创建并配置了 OpenShift 作为 secret 的 Developer Hub 应用程序信息。
        signInPage: microsoft
        启用 Microsoft Azure 供应商作为默认登录供应商。

可选: 考虑添加以下可选字段:

dangerouslyAllowSignInWithoutUserInCatalog: true

要启用身份验证,而无需在 Developer Hub 软件目录中置备用户。

警告

使用 dangerouslyAllowSignInWithoutUserInCatalog 探索 Developer Hub 功能,但不要在生产环境中使用它。

带有可选字段的 app-config-rhdh.yaml 片段来允许软件目录中不存在验证用户

auth:
  environment: production
  providers:
    microsoft:
      production:
        clientId: ${AUTH_AZURE_CLIENT_ID}
        clientSecret: ${AUTH_AZURE_CLIENT_SECRET}
        tenantId: ${AUTH_AZURE_TENANT_ID}
signInPage: microsoft
dangerouslyAllowSignInWithoutUserInCatalog: true
Copy to Clipboard Toggle word wrap

domainHint

可选的用于单租户应用程序。您可以通过从其他租户过滤出帐户,减少具有多个租户中帐户的登录侵权。如果要将此参数用于单租户应用,请取消注释并输入租户 ID。如果您的应用程序注册是多租户的,请将此参数留空。如需更多信息,请参阅 Home Realm Discovery

带有可选 domainHint 字段的 app-config.yaml 文件片段

auth:
  environment: production
  providers:
    microsoft:
      production:
        domainHint: ${AUTH_AZURE_TENANT_ID}
Copy to Clipboard Toggle word wrap

additionalScopes

可选用于其他范围。要为应用程序注册添加范围,取消注释并输入您要添加的范围列表。default 和 mandatory 值 list: 'openid', 'offline_access', 'profile', 'email', 'User.Read'.

带有可选 additionalScopes 字段的 app-config.yaml 文件片段

auth:
  environment: production
  providers:
    microsoft:
      production:
        additionalScopes:
           - Mail.Send
Copy to Clipboard Toggle word wrap

注意

对于具有传出访问限制的环境,此步骤是可选的,如防火墙规则。如果您的环境有这种限制,请确保您的 RHDH 后端可以访问以下主机:

  • login.microsoftonline.com :用于获取和交换授权代码和访问令牌。
  • graph.microsoft.com :用于检索用户配置文件信息(如源代码中引用)。如果这个主机无法访问,您可能会看到 Authentication failed,在尝试登录时无法获取用户配置集 错误。

= 从 Microsoft Azure 置备用户到软件目录

要使用 Microsoft Azure 验证用户身份,请在使用 Microsoft Azure 启用身份验证 后,将用户从 Microsoft Azure 置备到 Developer Hub 软件目录。

先决条件

流程

  • 要启用 Microsoft Azure 成员发现,请编辑自定义 Developer Hub ConfigMap,如 app-config-rhdh,并将以下行添加到 app-config.yaml 内容中:

    带有强制 microsoftGraphOrg 字段的 app-config.yaml 片段

    dangerouslyAllowSignInWithoutUserInCatalog: false
    catalog:
      providers:
        microsoftGraphOrg:
          providerId:
            target: https://graph.microsoft.com/v1.0
            tenantId: ${AUTH_AZURE_TENANT_ID}
            clientId: ${AUTH_AZURE_CLIENT_ID}
            clientSecret: ${AUTH_AZURE_CLIENT_SECRET}
    Copy to Clipboard Toggle word wrap

    dangerouslyAllowSignInWithoutUserInCatalog: false
    仅允许 Developer Hub 软件目录中的用户进行身份验证。
    target: https://graph.microsoft.com/v1.0
    定义提供程序所连接的 MSGraph API 端点。您可以更改此参数,以使用不同的版本,如 beta 端点
    tenandId,clientIdclientSecret
    使用您在 Microsoft Azure 中创建的 Developer Hub 应用程序信息,并在 OpenShift 中配置为 secret。

可选: 考虑添加以下 microsoftGraphOrg.providerId 字段:

authority: https://login.microsoftonline.com

定义所用的授权。更改该值以使用其他授权机构 如 Azure US government。默认值 :https://login.microsoftonline.com。

带有可选 queryMode 字段的 app-config.yaml 片段

catalog:
  providers:
    microsoftGraphOrg:
      providerId:
        authority: https://login.microsoftonline.com/
Copy to Clipboard Toggle word wrap

queryMode: basic | advanced

默认情况下,Microsoft Graph API 只提供 用于查询的基本 功能集。某些功能需要 高级查询 功能。请参阅 Microsoft Azure 高级查询

带有可选 queryMode 字段的 app-config.yaml 片段

catalog:
  providers:
    microsoftGraphOrg:
      providerId:
        queryMode: advanced
Copy to Clipboard Toggle word wrap

user.expand

要在结果中包含单一关系(navigation 属性)引用的扩展资源或集合。在一个请求中只能扩展一个关系。请参阅 Microsoft Graph query expand parameter。这个参数可以与 ] 或 xref:userFilter[ 结合使用。

带有可选 user.expand 字段的 app-config.yaml 片段

catalog:
  providers:
    microsoftGraphOrg:
      providerId:
        user:
          expand: manager
Copy to Clipboard Toggle word wrap

user.filter

过滤用户。请参阅 Microsoft Graph APIMicrosoft Graph API 查询过滤器参数语法。这个参数和 ???TITLE??? 是相互排斥的,只能指定一个。

带有可选 user.filter 字段的 app-config.yaml 片段

catalog:
  providers:
    microsoftGraphOrg:
      providerId:
        user:
          filter: accountEnabled eq true and userType eq 'member'
Copy to Clipboard Toggle word wrap

user.loadPhotos: true | false

默认加载照片。设置为 false 以不加载用户 photos。

带有可选 user.loadPhotos 字段的 app-config.yaml 片段

catalog:
  providers:
    microsoftGraphOrg:
      providerId:
        user:
          loadPhotos: true
Copy to Clipboard Toggle word wrap

user.select

定义要检索的 Microsoft Graph 资源类型

带有可选 user.select 字段的 app-config.yaml 片段

catalog:
  providers:
    microsoftGraphOrg:
      providerId:
        user:
          select: ['id', 'displayName', 'description']
Copy to Clipboard Toggle word wrap

userGroupMember.filter

使用组成员资格来获取用户。过滤组并获取其成员。这个参数和 ???TITLE??? 是相互排斥的,只能指定一个。

带有可选 userGroupMember.filter 字段的 app-config.yaml 片段

catalog:
  providers:
    microsoftGraphOrg:
      providerId:
        userGroupMember:
          filter: "displayName eq 'Backstage Users'"
Copy to Clipboard Toggle word wrap

userGroupMember.search

使用组成员资格来获取用户。搜索组并获取其成员。这个参数和 ???TITLE??? 是相互排斥的,只能指定一个。

带有可选 userGroupMember.search 字段的 app-config.yaml 片段

catalog:
  providers:
    microsoftGraphOrg:
      providerId:
        userGroupMember:
          search: '"description:One" AND ("displayName:Video" OR "displayName:Drive")'
Copy to Clipboard Toggle word wrap

group.expand

可选参数,在结果中包含单一关系(navigation 属性)引用的扩展资源或集合。在一个请求中只能扩展一个关系。请参阅 https://docs.microsoft.com/en-us/graph/query-parameters#expand-parameter 这个参数与 ] 而不是 xref:userFilter[ 结合使用。

带有可选 group.expand 字段的 app-config.yaml 片段

catalog:
  providers:
    microsoftGraphOrg:
      providerId:
        group:
          expand: member
Copy to Clipboard Toggle word wrap

group.filter

过滤组。请参阅 Microsoft Graph API 查询组语法

带有可选 group.filter 字段的 app-config.yaml 片段

catalog:
  providers:
    microsoftGraphOrg:
      providerId:
        group:
          filter: securityEnabled eq false and mailEnabled eq true and groupTypes/any(c:c+eq+'Unified')
Copy to Clipboard Toggle word wrap

group.search

搜索组。请参阅 Microsoft Graph API 查询搜索参数

带有可选 group.search 字段的 app-config.yaml 片段

catalog:
  providers:
    microsoftGraphOrg:
      providerId:
        group:
          search: '"description:One" AND ("displayName:Video" OR "displayName:Drive")'
Copy to Clipboard Toggle word wrap

group.select

要定义要检索的 Microsoft Graph 资源类型

带有可选 group.select 字段的 app-config.yaml 片段

catalog:
  providers:
    microsoftGraphOrg:
      providerId:
        group:
          select: ['id', 'displayName', 'description']
Copy to Clipboard Toggle word wrap

schedule.frequency

指定自定义调度频率。支持代码中使用的 cron、ISO 持续时间和"human 持续时间"。

带有可选 schedule.frequency 字段的 app-config.yaml 片段

catalog:
  providers:
    microsoftGraphOrg:
      providerId:
        schedule:
          frequency: { hours: 1 }
Copy to Clipboard Toggle word wrap

schedule.timeout

指定自定义超时。支持代码中使用的 ISO 持续时间和"human duration"。

带有可选 schedule.timeout 字段的 app-config.yaml 片段

catalog:
  providers:
    microsoftGraphOrg:
      providerId:
        schedule:
          timeout: { minutes: 50 }
Copy to Clipboard Toggle word wrap

schedule.initialDelay

指定自定义初始延迟。支持代码中使用的 ISO 持续时间和"human duration"。

带有可选 schedule.initialDelay 字段的 app-config.yaml 片段

catalog:
  providers:
    microsoftGraphOrg:
      providerId:
        schedule:
          initialDelay: { seconds: 15}
Copy to Clipboard Toggle word wrap

验证

  1. 检查控制台日志,以验证同步是否已完成。

    成功同步示例:

    backend:start: {"class":"MicrosoftGraphOrgEntityProvider$1","level":"info","message":"Read 1 msgraph users and 1 msgraph groups in 2.2 seconds. Committing...","plugin":"catalog","service":"backstage","taskId":"MicrosoftGraphOrgEntityProvider:default:refresh","taskInstanceId":"88a67ce1-c466-41a4-9760-825e16b946be","timestamp":"2024-06-26 12:23:42"}
    backend:start: {"class":"MicrosoftGraphOrgEntityProvider$1","level":"info","message":"Committed 1 msgraph users and 1 msgraph groups in 0.0 seconds.","plugin":"catalog","service":"backstage","taskId":"MicrosoftGraphOrgEntityProvider:default:refresh","taskInstanceId":"88a67ce1-c466-41a4-9760-825e16b946be","timestamp":"2024-06-26 12:23:42"}
    Copy to Clipboard Toggle word wrap

  2. 使用 Microsoft Azure 帐户登录。

法律通告

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat