Red Hat Developer Hub 中的身份验证
在 Red Hat Developer Hub 中配置外部服务的身份验证
摘要
第 1 章 了解身份验证和用户置备 复制链接链接已复制到粘贴板!
此模块概述了 Red Hat Developer Hub 中的身份验证和用户置备功能。了解在软件目录中创建用户和组实体到用户登录以及身份验证和目录插件如何启用每个步骤的过程。了解这个过程对于成功配置 Developer Hub 实例、通过授权保护访问 以及启用依赖同步用户和组数据的功能至关重要。
要完全启用目录功能,请将身份提供程序中的用户和组数据置备到 Developer Hub 软件目录。目录供应商插件异步处理此任务。这些插件查询身份提供程序(IdP)以获取相关的用户和组信息,并在 Developer Hub 目录中创建或更新对应的实体。调度的置备可确保目录准确反映您机构中的用户和组。
当用户尝试访问 Developer Hub 时,Developer Hub 将它们重定向到配置的身份验证提供程序,如 Red Hat Build of Keycloak (RHBK), GitHub, 或 Microsoft Azure。此外部 IdP 负责验证用户。
身份验证成功后,在 app-config.yaml 文件中配置的 Developer Hub 身份验证插件处理 IdP 的响应,解析 Developer Hub 软件目录中的身份,并在 Developer Hub 内建立用户会话。
由于以下原因,配置身份验证和用户置备至关重要。
- 它确保只有经过身份验证的用户可以访问您的 Developer Hub 实例。
- 它启用了授权,允许您根据从 IdP 同步的用户和组成员资格定义访问控制。
- 对于依赖了解用户、组和软件组件之间的实体所有权和关系的不同目录功能,需要置备用户和组数据。如果没有此置备步骤,显示目录中拥有组件的功能可能无法正常工作。
要探索 Developer Hub 功能,您可以:
- 要在没有外部 IdP 的情况下使用 Developer Hub ,使 guest 用户能够跳过配置身份验证和授权,以 guest 用户身份登录,并访问所有 Developer Hub 功能。
-
要在没有授权策略和功能依赖软件目录的情况下使用 Developer Hub,您可以启用
dangerouslyAllowSignInWithoutUserInCatalogresolver 选项。此设置绕过要求用户处于目录中的检查,但仍强制执行身份验证。
Developer Hub 使用单向同步模型,其中将身份提供程序的用户和组数据流到 Developer Hub 软件目录。因此,通过 Developer Hub Web UI 或 REST API 手动删除用户或组可能无效或导致不一致,因为这些实体将在下一次出现过程中重新创建。
第 2 章 使用 Guest 用户进行身份验证 复制链接链接已复制到粘贴板!
要探索 Developer Hub 功能,您可以跳过配置身份验证和授权。您可以将 Developer Hub 配置为以 Guest 用户身份登录并访问 Developer Hub 功能。
2.1. 在基于 Operator 的安装中使用 Guest 用户进行身份验证 复制链接链接已复制到粘贴板!
基于 Operator 的安装后,您可以将 Developer Hub 配置为以 Guest 用户身份登录并访问 Developer Hub 功能。
先决条件
- 使用 Operator 安装 Developer Hub。
- 您 添加了自定义 Developer Hub 应用程序配置,并有足够的权限来修改它。
流程
要在 Developer Hub 自定义配置中启用 guest 用户,请使用以下内容编辑 Developer Hub 应用程序配置 :
app-config.yamlfragmentauth: environment: development providers: guest: dangerouslyAllowOutsideDevelopment: true
验证
- 进入 Developer Hub 登录页面。
- 要使用 Guest 用户帐户登录,请单击 Guest 标题中的 Enter。
- 在 Developer Hub Settings 页面中,您的配置集名称为 Guest。
- 您可以使用 Developer Hub 功能。
2.2. 在基于 Helm 的安装中使用 Guest 用户进行身份验证 复制链接链接已复制到粘贴板!
在基于 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
验证
- 进入 Developer Hub 登录页面。
- 要使用 Guest 用户帐户登录,请单击 Guest 标题中的 Enter。
- 在 Developer Hub Settings 页面中,您的配置集名称为 Guest。
- 您可以使用 Developer Hub 功能。
第 3 章 使用红帽构建 Keycloak (RHBK)进行身份验证 复制链接链接已复制到粘贴板!
使用红帽构建的 Keycloak (RHBK)验证用户身份:
3.1. 启用使用红帽构建的 Keycloak (RHBK)身份验证 复制链接链接已复制到粘贴板!
要使用 Red Hat Build of Keycloak (RHBK)验证用户,请在 Red Hat Developer Hub 中启用 OpenID Connect (OIDC)身份验证供应商。
先决条件
- 您 添加了自定义 Developer Hub 应用程序配置,并有足够的权限来修改它。
- RHSSO 中有足够的权限来创建和管理域。
流程
要允许 Developer Hub 使用 RHBK 进行身份验证,请完成 RHBK 中的步骤,创建 realm 和用户,并保护第一个应用程序:
使用现有域,或使用不同的名称(如 < my_ realm > )创建一个 域。为下一步保存值:
- RHBK 域基本 URL,例如: < your_rhbk_URL> /realms/ <your_realm>。
要在 RHBK 中注册您的 Developer Hub,请在创建域中注册 第一个应用程序,使用以下内容保护第一个应用程序 :
- 客户端 ID :不同的客户端 ID,如 < RHDH>。
-
有效的重定向 URI :设置为 OIDC 处理程序 URL:
https:// <RHDH_URL> /api/auth/oidc/handler/frame. - 导航到 Credentials 选项卡,再复制 Client secret。
保存下一步的值:
- 客户端 ID
- Client Secret
- 要准备验证步骤,请在同一域中获取现有用户 或创建用户的凭证 信息。保存验证步骤的用户凭证信息。
要将 RHSSO 凭证添加到 Developer Hub 中,请将以下键/值对添加到 Developer Hub secret 中:
AUTH_OIDC_CLIENT_ID- 输入保存 的客户端 ID。
AUTH_OIDC_CLIENT_SECRET- 输入保存 的客户端 Secret。
AUTH_OIDC_METADATA_URL- 输入保存的 RHBK 域基础 URL。
要在 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环境:production-
将环境标记为
production,以在 Developer Hub 主页中隐藏 Guest 登录。 metadataUrl,clientId,clientSecret- 使用您的 secret 配置 OIDC 供应商。
sigInPage: oidc- 将 OIDC 供应商作为默认登录供应商启用。
提示: auto- 要允许身份提供程序自动决定是否提示输入凭证,或者在存在活跃的 RHSSO 会话时绕过登录重定向。
如果没有设置 prompt: auto,则身份提供程序默认为 prompt: none,这假设您已经登录,并在没有活跃会话的情况下拒绝登录请求。
callbackUrlRHBK 回调 URL。
带有可选
callbackURL字段的app-config.yaml片段auth: providers: oidc: production: callbackUrl: ${AUTH_OIDC_CALLBACK_URL}tokenEndpointAuthMethod令牌端点身份验证方法。
带有可选
tokenEndpointAuthMethod字段的app-config.yaml片段auth: providers: oidc: production: tokenEndpointAuthMethod: ${AUTH_OIDC_TOKEN_ENDPOINT_METHOD}tokenSignedResponseAlg令牌签名的响应算法。
带有可选
tokenSignedResponseAlg字段的app-config.yaml片段auth: providers: oidc: production: tokenSignedResponseAlg: ${AUTH_OIDC_SIGNED_RESPONSE_ALG}scopeRHBK 范围.
带有可选
scope字段的app-config.yaml片段auth: providers: oidc: production: scope: ${AUTH_OIDC_SCOPE}signIn解析器身份验证成功后,中的用户签名必须解析为 Developer Hub 目录中的现有用户。为了更好地为您的用例安全地匹配用户,请考虑配置特定的解析器。输入解析器列表以覆盖默认解析器:
oidcSubClaimMatchingKeycloakUserId。身份验证提供程序尝试每个登录解析器按顺序尝试,直到成功为止,如果没有成功,则失败。
警告在 production 模式中,只配置一个解析器以确保用户被安全地匹配。
解析器:::: 输入登录解析器名称。可用值:*oidcSubClaimMatchingKeycloakUserId*emailLocalPartMatchingUserEntityName*emailMatchingUserEntityProfileEmail*preferredUsernameMatchingUserEntityName+ .
app-config.yaml片段带有可选解析器列表auth: providers: oidc: production: signIn: resolvers: - resolver: oidcSubClaimMatchingKeycloakUserId - resolver: preferredUsernameMatchingUserEntityName - resolver: emailMatchingUserEntityProfileEmail - resolver: emailLocalPartMatchingUserEntityNamedangerouslyAllowSignInWithoutUserInCatalog: true配置登录解析器以绕过 Developer Hub 软件目录中的用户置备要求。
警告使用这个选项探索 Developer Hub 功能,但不要在生产环境中使用它。
带有可选字段的
app-config-rhdh.yaml片段,允许软件目录中缺少的用户签名auth: environment: production providers: oidc: production: metadataUrl: ${AUTH_OIDC_METADATA_URL} clientId: ${AUTH_OIDC_CLIENT_ID} clientSecret: ${AUTH_OIDC_CLIENT_SECRET} signIn: resolvers: - resolver: oidcSubClaimMatchingKeycloakUserID dangerouslyAllowSignInWithoutUserInCatalog: true signInPage: oidc
sessionDuration用户会话的寿命。以
ms库格式输入持续时间(如 '24h'、'2 days')、ISO 持续时间或 "human duration",如代码中使用的。带有可选
sessionDuration字段的app-config-rhdh.yaml片段auth: providers: github: production: sessionDuration: { hours: 24 }authbackstageTokenExpiration- 要从默认值一小时修改 Developer Hub 令牌过期,请注意,这指的是短期加密令牌的有效性,而不是会话持续时间。expiration 值必须在 10 分钟到 24 小时之间设置。
.
app-config.yaml片段带有可选的auth.backstageTokenExpiration字段auth: backstageTokenExpiration: { minutes: <user_defined_value> }安全考虑如果因为频繁刷新令牌请求而发出多个有效的刷新令牌,旧的令牌将保持有效,直到它们过期。要增强安全性并防止旧令牌造成潜在的滥用,请在 RHBK 域中启用刷新令牌轮转策略。
- 在导航菜单的 Configure 部分中,单击 Realm Settings。
- 从 Realm Settings 页面,单击 Tokens 选项卡。
- 在 Tokens 选项卡的 Refresh tokens 部分中,将 Revoke Refresh Token 切换到 Enabled 位置。
验证
- 进入 Developer Hub 登录页面。
- 您的 Developer Hub 签名页面显示 使用 OIDC 的 Sign in,并且 guest 用户登录被禁用。
- 使用保存 的用户名和密码 值使用 OIDC 登录。
3.2. 将来自红帽构建的 Keycloak (RHBK)的用户置备到软件目录 复制链接链接已复制到粘贴板!
先决条件
流程
要启用 RHBK 成员发现,请编辑自定义 Developer Hub ConfigMap,如
app-config-rhdh,并将以下行添加到app-config.yaml内容中:带有强制
keycloakOrg字段的app-config.yaml片段catalog: providers: keycloakOrg: default: baseUrl: ${AUTH_OIDC_METADATA_URL} clientId: ${AUTH_OIDC_CLIENT_ID} clientSecret: ${AUTH_OIDC_CLIENT_SECRET}可选: 考虑添加以下可选字段:
realm要同步的域。默认值:
master。带有可选
realm字段的app-config.yaml片段catalog: providers: keycloakOrg: default: realm: masterloginRealm用于验证的域。默认值:
master。带有可选
loginRealm字段的app-config.yaml片段catalog: providers: keycloakOrg: default: loginRealm: masteruserQuerySize同时查询的用户号。默认值
:100。带有可选
userQuerySize字段的app-config.yaml片段catalog: providers: keycloakOrg: default: userQuerySize: 100groupQuerySize同时查询的组号。默认值
:100。带有可选
groupQuerySize字段的app-config.yaml片段catalog: providers: keycloakOrg: default: groupQuerySize: 100schedule.frequency指定自定义调度频率。支持代码中使用的 cron、ISO 持续时间和"human 持续时间"。
带有可选
schedule.frequency字段的app-config.yaml片段catalog: providers: keycloakOrg: default: schedule: frequency: { hours: 1 }schedule.timeout指定自定义超时。支持代码中使用的 ISO 持续时间和"human duration"。
带有可选
schedule.timeout字段的app-config.yaml片段catalog: providers: keycloakOrg: default: schedule: timeout: { minutes: 50 }schedule.initialDelay指定自定义初始延迟。支持代码中使用的 ISO 持续时间和"human duration"。
带有可选
schedule.initialDelay字段的app-config.yaml片段catalog: providers: keycloakOrg: default: schedule: initialDelay: { seconds: 15}
验证
检查控制台日志,以验证同步是否已完成。
成功同步示例:
{"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"}- 使用 RHBK 帐户登录。
3.3. 创建自定义转换器,将来自红帽构建的 Keycloak (RHBK)的用户置备到软件目录 复制链接链接已复制到粘贴板!
要自定义 RHBK 用户和组如何映射到 Red Hat Developer Hub 实体,您可以创建一个使用 keycloakTransformerExtensionPoint 为 Keycloak 后端提供自定义用户和组转换器的后端模块。
先决条件
流程
-
使用
yarn 新命令创建一个新的 backend 模块。 将自定义用户和组转换器添加到
keycloakTransformerExtensionPoint中。以下是如何定义 backend 模块的示例:
plugins/<module-name>/src/module.tsimport { 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 */ }, }); }, });重要模块的
pluginId必须设置为catalog以匹配keycloak-backend的pluginId;否则,模块无法初始化。将此新后端模块安装到 Developer Hub 后端中。
backend.add(import(backstage-plugin-catalog-backend-module-keycloak-transformer))
验证
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"}- 完成第一次导入后,导航到 Catalog 页面,再选择 User 来查看用户列表。
- 当您选择用户时,您会看到从 RHBK 导入的信息。
- 您可以选择组,查看列表,访问或查看从 RHBK 导入的信息。
- 您可以使用 RHBK 帐户登录。
第 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 登录。
4.2. 将用户从 GitHub 置备到软件目录 复制链接链接已复制到粘贴板!
要验证用户,Red Hat Developer Hub 在软件目录中需要存在它们。考虑配置 Developer Hub 以根据调度将用户从 GitHub 置备到软件目录,而不是手动置备用户。
先决条件
您已使用 GitHub 启用身份验证,包括以下 secret:
-
GITHUB_HOST_DOMAIN -
GITHUB_ORGANIZATION
-
流程
要启用 GitHub 成员发现,请编辑自定义 Developer Hub ConfigMap,如
app-config-rhdh,并将以下行添加到app-config.yaml内容中:带有强制
github字段的app-config.yaml片段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机构,githubUrl, 和orgs- 使用您在 GitHub 中创建并配置了 OpenShift 作为 secret 的 Developer Hub 应用程序信息。
schedule.frequency- 指定自定义调度频率。支持代码中使用的 cron、ISO 持续时间和"human 持续时间"。
schedule.timeout- 指定自定义超时。支持代码中使用的 ISO 持续时间和"human duration"。
schedule.initialDelay- 指定自定义初始延迟。支持代码中使用的 ISO 持续时间和"human duration"。
验证
检查控制台日志,以验证同步是否已完成。
成功同步示例:
{"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"}- 使用 GitHub 帐户登录。
第 5 章 使用 Microsoft Azure 进行身份验证 复制链接链接已复制到粘贴板!
使用 Microsoft Azure 验证用户身份:
5.1. 使用 Microsoft Azure 启用身份验证 复制链接链接已复制到粘贴板!
Red Hat Developer Hub 包括一个 Microsoft Azure 身份验证供应商,可以使用 OAuth 验证用户。
先决条件
您有在 Microsoft Azure 中注册应用程序的权限。
- 您 添加了自定义 Developer Hub 应用程序配置,并有足够的权限来修改它。
流程
要允许 Developer Hub 与 Microsoft Azure 进行身份验证,请在 Microsoft Azure 中创建 OAuth 应用程序。
在 Azure 门户中 , 使用 配置创建新注册 :
- Name
- Azure 中的应用程序名称,如 < My Developer Hub>。
在 Home > App registrations > <My Developer Hub > > Manage > ; Authentication 页面中,使用以下配置添加平台 :
- 重定向 URI
-
输入 Developer Hub 中设置的后端身份验证 URI:
https:// <my_developer_hub_url> /api/auth/microsoft/handler/frame - front-channel logout URL
- 留空。
- 隐式授权和混合流
- 保留所有复选框都未清除。
在 Home > App registrations > ; <My Developer Hub > > Manage > ; API permissions 页面中,添加 Permission,然后为 Microsoft Graph API 添加以下 委派权限 :
-
email -
offline_access -
openid -
配置集 -
user.Read -
您在本节和
app-config.yamlDeveloper Hub 配置文件中定义的 Microsoft Graph API 的可选自定义范围。
-
您的公司可能需要您授予 admin 同意这些权限。即使您的公司不需要管理员同意,您可能也要这样做,因为这意味着用户在第一次访问阶段时不需要单独同意。要授予管理员同意,目录管理员必须进入管理员同意页面,然后单击 COMPANY NAME 的 Grant admin consent 。
- 在 Home > App registrations > < My Developer Hub > > Manage > Certificates & Secrets 页的 Client secrets 选项卡中,创建一个 New client secret。
保存下一步:
- 目录(租户)ID
- 应用程序(客户端)ID
应用程序(客户端)secret
要将 Microsoft Azure 凭证添加到 Developer Hub,请将以下键/值对添加到 Developer Hub secret 中:
AUTH_AZURE_TENANT_ID- 输入您保存的目录 (租户)ID。
AUTH_AZURE_CLIENT_ID- 输入您保存的 应用程序(客户端)ID。
AUTH_AZURE_CLIENT_SECRET- 输入您保存的 应用程序(客户端)secret。
在
app-config.yaml文件中设置 Microsoft Azure 身份验证供应商:app-config.yaml文件片段auth: environment: production1 providers: microsoft: production: clientId: ${AUTH_AZURE_CLIENT_ID}2 clientSecret: ${AUTH_AZURE_CLIENT_SECRET} tenantId: ${AUTH_AZURE_TENANT_ID} signInPage: microsoft3 - 1
- 将环境标记为生产环境,并在 Developer Hub 登录页面中禁用 Guest login 选项。
- 2
- 应用在 Developer Hub secret 中配置的 Microsoft Azure 凭证。
- 3
- 将 Microsoft Azure 供应商设置为 Developer Hub 登录供应商。
可选: 考虑添加以下可选字段:
domainHint可选的用于单租户应用程序。您可以通过从其他租户过滤出帐户,减少具有多个租户中帐户的登录侵权。如果要将此参数用于单租户应用,请取消注释并输入租户 ID。如果您的应用程序注册是多租户的,请将此参数留空。如需更多信息,请参阅 Home Realm Discovery。
带有可选
domainHint字段的app-config.yaml文件片段auth: environment: production providers: microsoft: production: domainHint: ${AUTH_AZURE_TENANT_ID}additionalScopes可选用于其他范围。要为应用程序注册添加范围,取消注释并输入您要添加的范围列表。default 和 mandatory 值 list:
'openid', 'offline_access', 'profile', 'email', 'User.Read'.带有可选
additionalScopes字段的app-config.yaml文件片段auth: environment: production providers: microsoft: production: additionalScopes: - Mail.SendsessionDuration用户会话的寿命。以
ms库格式输入持续时间(如 '24h'、'2 days')、ISO 持续时间或 "human duration",如代码中使用的。带有可选
sessionDuration字段的app-config-rhdh.yaml片段auth: providers: microsoft: production: sessionDuration: { hours: 24 }signIn解析器-
身份验证成功后,中的用户签名必须解析为 Developer Hub 目录中的现有用户。为了更好地为您的用例安全地匹配用户,请考虑配置特定的解析器。输入解析器列表以覆盖默认解析器:
emailLocalPartMatchingUserEntityName。
身份验证提供程序尝试每个登录解析器按顺序尝试,直到成功为止,如果没有成功,则失败。
警告在 production 模式中,只配置一个解析器以确保用户被安全地匹配。
resolver输入登录解析器名称。可用的解析器:
-
userIdMatchingUserEntityAnnotation -
emailLocalPartMatchingUserEntityName -
emailMatchingUserEntityProfileEmail
-
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} signIn: resolvers: - resolver: usernameMatchingUserEntityName dangerouslyAllowSignInWithoutUserInCatalog: true signInPage: microsoft
注意对于具有传出访问限制的环境,此步骤是可选的,如防火墙规则。如果您的环境有这种限制,请确保您的 RHDH 后端可以访问以下主机:
-
login.microsoftonline.com:用于获取和交换授权代码和访问令牌。 -
graph.microsoft.com:用于检索用户配置文件信息(如源代码中引用)。如果这个主机无法访问,您可能会看到 Authentication failed,在尝试登录时无法获取用户配置集 错误。
= 从 Microsoft Azure 置备用户到软件目录
要使用 Microsoft Azure 验证用户身份,请在使用 Microsoft Azure 启用身份验证 后,将用户从 Microsoft Azure 置备到 Developer Hub 软件目录。
先决条件
- 您已使用 Microsoft Azure 启用身份验证。
流程
-
要启用 Microsoft Azure 成员发现,请编辑自定义 Developer Hub ConfigMap,如
app-config-rhdh,并将以下行添加到app-config.yaml内容中:
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}
目标 :https://graph.microsoft.com/v1.0- 定义提供程序所连接的 MSGraph API 端点。您可以更改此参数,以使用不同的版本,如 beta 端点。
tenandId,clientId和clientSecret- 使用您在 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/
queryMode: basic | advanced默认情况下,Microsoft Graph API 只提供
用于查询的基本功能集。某些功能需要高级查询功能。请参阅 Microsoft Azure 高级查询。带有可选
queryMode字段的app-config.yaml片段catalog: providers: microsoftGraphOrg: providerId: queryMode: advanced
user.expand要在结果中包含单一关系(navigation 属性)引用的扩展资源或集合。在一个请求中只能扩展一个关系。请参阅 Microsoft Graph query expand parameter。这个参数可以与 ] 或 xref:userFilter[ 结合使用。
带有可选
user.expand字段的app-config.yaml片段catalog: providers: microsoftGraphOrg: providerId: user: expand: manager
user.filter过滤用户。请参阅 Microsoft Graph API 和 Microsoft Graph API 查询过滤器参数语法。这个参数和 ???TITLE??? 是相互排斥的,只能指定一个。
带有可选
user.filter字段的app-config.yaml片段catalog: providers: microsoftGraphOrg: providerId: user: filter: accountEnabled eq true and userType eq 'member'
user.loadPhotos: true | false默认加载照片。设置为
false以不加载用户 photos。带有可选
user.loadPhotos字段的app-config.yaml片段catalog: providers: microsoftGraphOrg: providerId: user: loadPhotos: true
user.select定义要检索的 Microsoft Graph 资源类型。
带有可选
user.select字段的app-config.yaml片段catalog: providers: microsoftGraphOrg: providerId: user: select: ['id', 'displayName', 'description']
userGroupMember.filter使用组成员资格来获取用户。过滤组并获取其成员。这个参数和 ???TITLE??? 是相互排斥的,只能指定一个。
app-config.yamlfragment with optionaluserGroupMember.filterfieldcatalog: providers: microsoftGraphOrg: providerId: userGroupMember: filter: "displayName eq 'Backstage Users'"
userGroupMember.search使用组成员资格来获取用户。搜索组并获取其成员。这个参数和 ???TITLE??? 是相互排斥的,只能指定一个。
app-config.yamlfragment with optionaluserGroupMember.searchfieldcatalog: providers: microsoftGraphOrg: providerId: userGroupMember: search: '"description:One" AND ("displayName:Video" OR "displayName:Drive")'
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
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')
group.search搜索组。请参阅 Microsoft Graph API 查询搜索参数。
带有可选
group.search字段的app-config.yaml片段catalog: providers: microsoftGraphOrg: providerId: group: search: '"description:One" AND ("displayName:Video" OR "displayName:Drive")'
group.select要定义要检索的 Microsoft Graph 资源类型。
带有可选
group.select字段的app-config.yaml片段catalog: providers: microsoftGraphOrg: providerId: group: select: ['id', 'displayName', 'description']schedule.frequency指定自定义调度频率。支持代码中使用的 cron、ISO 持续时间和"human 持续时间"。
带有可选
schedule.frequency字段的app-config.yaml片段catalog: providers: microsoftGraphOrg: providerId: schedule: frequency: { hours: 1 }schedule.timeout指定自定义超时。支持代码中使用的 ISO 持续时间和"human duration"。
带有可选
schedule.timeout字段的app-config.yaml片段catalog: providers: microsoftGraphOrg: providerId: schedule: timeout: { minutes: 50 }schedule.initialDelay指定自定义初始延迟。支持代码中使用的 ISO 持续时间和"human duration"。
带有可选
schedule.initialDelay字段的app-config.yaml片段catalog: providers: microsoftGraphOrg: providerId: schedule: initialDelay: { seconds: 15}
验证
检查控制台日志,以验证同步是否已完成。
成功同步示例:
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"}- 使用 Microsoft Azure 帐户登录。