This documentation is for a release that is no longer maintained
See documentation for the latest supported version.身份验证
在 Red Hat Developer Hub 中配置外部服务的身份验证
摘要
前言 复制链接链接已复制到粘贴板!
根据机构的安全策略,您可能需要在授予用户访问资源(如 Red Hat Developer Hub)前识别和授权用户。
在 Developer Hub 中,身份验证和授权是两个独立的进程:
- 身份验证定义了用户身份,并将此信息传递给 Developer Hub。请阅读以下章节,以在 Developer Hub 中配置身份验证。
- 授权定义经过身份验证的用户可以访问或在 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 功能。
1.1. 在基于 Operator 的安装中使用 Guest 用户进行身份验证 复制链接链接已复制到粘贴板!
基于 Operator 的安装后,您可以将 Developer Hub 配置为以 Guest 用户身份登录并访问 Developer Hub 功能。
先决条件
- 使用 Operator 安装 Developer Hub。
- 您 添加了自定义 Developer Hub 应用程序配置,并有足够的权限来修改它。
流程
要在 Developer Hub 自定义配置中启用 guest 用户,请使用以下内容编辑 Developer Hub 应用程序配置 :
app-config.yaml片段auth: environment: development providers: guest: dangerouslyAllowOutsideDevelopment: trueauth: environment: development providers: guest: dangerouslyAllowOutsideDevelopment: trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
- 进入 Developer Hub 登录页面。
- 要使用 Guest 用户帐户登录,请单击 Guest 标题中的 Enter。
- 在 Developer Hub Settings 页面中,您的配置集名称为 Guest。
- 您可以使用 Developer Hub 功能。
1.2. 在基于 Helm 的安装中使用 Guest 用户进行身份验证 复制链接链接已复制到粘贴板!
在基于 Helm 的安装中,您可以将 Developer Hub 配置为以 Guest 用户身份登录并访问 Developer Hub 功能。
先决条件
流程
要在 Developer Hub 自定义配置中启用 guest 用户,请使用以下内容配置 Red Hat Developer Hub Helm Chart :
Red Hat Developer Hub Helm Chart 配置片段
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
- 进入 Developer Hub 登录页面。
- 要使用 Guest 用户帐户登录,请单击 Guest 标题中的 Enter。
- 在 Developer Hub Settings 页面中,您的配置集名称为 Guest。
- 您可以使用 Developer Hub 功能。
第 2 章 使用红帽构建 Keycloak (RHBK)进行身份验证 复制链接链接已复制到粘贴板!
RHSSO 7.6 作为身份验证提供程序已弃用。您可以继续使用 RHSSO,直到其维护支持结束为止。如需更多信息,请参阅 RHSSO 生命周期日期。作为替代方案,请考虑迁移到红帽构建的 Keycloak (RHBK)。
使用红帽构建的 Keycloak (RHBK)验证用户身份:
2.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 身份验证Copy to Clipboard Copied! Toggle word wrap Toggle overflow 环境: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}
auth:
providers:
oidc:
production:
callbackUrl: ${AUTH_OIDC_CALLBACK_URL}
tokenEndpointAuthMethod
令牌端点身份验证方法。
带有可选 tokenEndpointAuthMethod 字段的 app-config.yaml 片段
auth:
providers:
oidc:
production:
tokenEndpointAuthMethod: ${AUTH_OIDC_TOKEN_ENDPOINT_METHOD}
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}
auth:
providers:
oidc:
production:
tokenSignedResponseAlg: ${AUTH_OIDC_SIGNED_RESPONSE_ALG}
scope
RHBK 范围.
带有可选 scope 字段的 app-config.yaml 片段
auth:
providers:
oidc:
production:
scope: ${AUTH_OIDC_SCOPE}
auth:
providers:
oidc:
production:
scope: ${AUTH_OIDC_SCOPE}
signIn.resolvers
声明性解析器覆盖默认解析器: emailLocalPartMatchingUserEntityName。身份验证提供程序尝试每个登录解析器,直到成功为止,如果不成功,则失败。
带有可选 callbackURL 字段的 app-config.yaml 片段
auth.backstageTokenExpiration
要从默认值一小时修改 Developer Hub 令牌过期,请注意,这指的是短期加密令牌的有效性,而不是会话持续时间。expiration 值必须在 10 分钟到 24 小时之间设置。
带有可选 auth.backstageTokenExpiration 字段的 app-config.yaml 片段
auth:
backstageTokenExpiration: { minutes: <user_defined_value> }
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 登录。
2.2. 将来自红帽构建的 Keycloak (RHBK)的用户置备到软件目录 复制链接链接已复制到粘贴板!
先决条件
流程
要启用 RHBK 成员发现,请编辑自定义 Developer Hub ConfigMap,如
app-config-rhdh,并将以下行添加到app-config.yaml内容中:带有强制
keycloakOrg字段的app-config.yaml片段Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 考虑添加以下可选字段:
realm要同步的域。默认值:
master。带有可选
realm字段的app-config.yaml片段catalog: providers: keycloakOrg: default: realm: mastercatalog: providers: keycloakOrg: default: realm: masterCopy to Clipboard Copied! Toggle word wrap Toggle overflow loginRealm用于验证的域。默认值:
master。带有可选
loginRealm字段的app-config.yaml片段catalog: providers: keycloakOrg: default: loginRealm: mastercatalog: providers: keycloakOrg: default: loginRealm: masterCopy to Clipboard Copied! Toggle word wrap Toggle overflow userQuerySize同时查询的用户号。默认值
:100。带有可选
userQuerySize字段的app-config.yaml片段catalog: providers: keycloakOrg: default: userQuerySize: 100catalog: providers: keycloakOrg: default: userQuerySize: 100Copy to Clipboard Copied! Toggle word wrap Toggle overflow groupQuerySize同时查询的组号。默认值
:100。带有可选
groupQuerySize字段的app-config.yaml片段catalog: providers: keycloakOrg: default: groupQuerySize: 100catalog: providers: keycloakOrg: default: groupQuerySize: 100Copy to Clipboard Copied! Toggle word wrap Toggle overflow schedule.frequency指定自定义调度频率。支持代码中使用的 cron、ISO 持续时间和"human 持续时间"。
带有可选
schedule.frequency字段的app-config.yaml片段Copy to Clipboard Copied! Toggle word wrap Toggle overflow schedule.timeout指定自定义超时。支持代码中使用的 ISO 持续时间和"human duration"。
带有可选
schedule.timeout字段的app-config.yaml片段Copy to Clipboard Copied! Toggle word wrap Toggle overflow schedule.initialDelay指定自定义初始延迟。支持代码中使用的 ISO 持续时间和"human duration"。
带有可选
schedule.initialDelay字段的app-config.yaml片段Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
检查控制台日志,以验证同步是否已完成。
成功同步示例:
{"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"}{"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 Copied! Toggle word wrap Toggle overflow - 使用 RHBK 帐户登录。
2.3. 创建自定义转换器,将来自红帽构建的 Keycloak (RHBK)的用户置备到软件目录 复制链接链接已复制到粘贴板!
要自定义 RHBK 用户和组如何映射到 Red Hat Developer Hub 实体,您可以创建一个使用 keycloakTransformerExtensionPoint 为 Keycloak 后端提供自定义用户和组转换器的后端模块。
先决条件
流程
-
使用
yarn 新命令创建一个新的 backend 模块。 将自定义用户和组转换器添加到
keycloakTransformerExtensionPoint中。以下是如何定义 backend 模块的示例:
plugins/<module-name>/src/module.tsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要模块的
pluginId必须设置为catalog以匹配keycloak-backend的pluginId;否则,模块无法初始化。将此新后端模块安装到 Developer Hub 后端中。
backend.add(import(backstage-plugin-catalog-backend-module-keycloak-transformer))
backend.add(import(backstage-plugin-catalog-backend-module-keycloak-transformer))Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
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"}{"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 Copied! Toggle word wrap Toggle overflow - 完成第一次导入后,导航到 Catalog 页面,再选择 User 来查看用户列表。
- 当您选择用户时,您会看到从 RHBK 导入的信息。
- 您可以选择组,查看列表,访问或查看从 RHBK 导入的信息。
- 您可以使用 RHBK 帐户登录。
第 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 配置映射,如
my-rhdh-app-config,并将以下行添加到app-config.yaml文件内容中:app-config-rhdh.yaml片段带有强制字段,以启用使用 GitHub 进行身份验证Copy to Clipboard Copied! Toggle word wrap Toggle overflow 环境: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片段来允许软件目录中不存在验证用户Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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>auth: providers: github: production: callbackUrl: <your_intermediate_service_url/handler>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
提示要启用与不同身份验证供应商的 GitHub 集成,请完成以下配置:
-
将 GitHub 提供程序添加到现有
auth部分。 -
保留您的身份验证提供程序配置中
signInPage部分。
app-config.yaml文件片段与强制字段启用 GitHub 集成并使用不同的身份验证供应商Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
- 进入 Developer Hub 登录页面。
- 您的 Developer Hub 登录页面显示 使用 GitHub 的 Sign in,并且 Guest 用户登录被禁用。
- 使用 GitHub 登录。
3.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片段Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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"。
验证
检查控制台日志,以验证同步是否已完成。
成功同步示例:
{"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"}{"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 Copied! Toggle word wrap Toggle overflow - 使用 GitHub 帐户登录。
第 4 章 使用 Microsoft Azure 进行身份验证 复制链接链接已复制到粘贴板!
使用 Microsoft Azure 验证用户身份:
4.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文件片段Copy to Clipboard Copied! Toggle word wrap Toggle overflow 环境:production- 将环境标记为 production,以在 Developer Hub 主页中隐藏 Guest 登录。
clientId,clientSecret和tenantId- 使用您在 Microsoft Azure 中创建并配置了 OpenShift 作为 secret 的 Developer Hub 应用程序信息。
signInPage: microsoft- 启用 Microsoft Azure 供应商作为默认登录供应商。
可选: 考虑添加以下可选字段:
dangerouslyAllowSignInWithoutUserInCatalog: true要启用身份验证,而无需在 Developer Hub 软件目录中置备用户。
警告使用
dangerouslyAllowSignInWithoutUserInCatalog探索 Developer Hub 功能,但不要在生产环境中使用它。带有可选字段的
app-config-rhdh.yaml片段来允许软件目录中不存在验证用户Copy to Clipboard Copied! Toggle word wrap Toggle overflow domainHint可选的用于单租户应用程序。您可以通过从其他租户过滤出帐户,减少具有多个租户中帐户的登录侵权。如果要将此参数用于单租户应用,请取消注释并输入租户 ID。如果您的应用程序注册是多租户的,请将此参数留空。如需更多信息,请参阅 Home Realm Discovery。
带有可选
domainHint字段的app-config.yaml文件片段Copy to Clipboard Copied! Toggle word wrap Toggle overflow additionalScopes可选用于其他范围。要为应用程序注册添加范围,取消注释并输入您要添加的范围列表。default 和 mandatory 值 list:
'openid', 'offline_access', 'profile', 'email', 'User.Read'.带有可选
additionalScopes字段的app-config.yaml文件片段Copy to Clipboard Copied! Toggle word wrap Toggle overflow
对于具有传出访问限制的环境,此步骤是可选的,如防火墙规则。如果您的环境有这种限制,请确保您的 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内容中:带有强制
microsoftGraphOrg字段的app-config.yaml片段Copy to Clipboard Copied! Toggle word wrap Toggle overflow dangerouslyAllowSignInWithoutUserInCatalog: false- 仅允许 Developer Hub 软件目录中的用户进行身份验证。
target: 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/catalog: providers: microsoftGraphOrg: providerId: authority: https://login.microsoftonline.com/Copy to Clipboard Copied! Toggle word wrap Toggle overflow
queryMode: basic | advanced默认情况下,Microsoft Graph API 只提供
用于查询的基本功能集。某些功能需要高级查询功能。请参阅 Microsoft Azure 高级查询。带有可选
queryMode字段的app-config.yaml片段catalog: providers: microsoftGraphOrg: providerId: queryMode: advancedcatalog: providers: microsoftGraphOrg: providerId: queryMode: advancedCopy to Clipboard Copied! Toggle word wrap Toggle overflow
user.expand要在结果中包含单一关系(navigation 属性)引用的扩展资源或集合。在一个请求中只能扩展一个关系。请参阅 Microsoft Graph query expand parameter。这个参数可以与 ] 或 xref:userFilter[ 结合使用。
带有可选
user.expand字段的app-config.yaml片段Copy to Clipboard Copied! Toggle word wrap Toggle overflow
user.filter过滤用户。请参阅 Microsoft Graph API 和 Microsoft Graph API 查询过滤器参数语法。这个参数和 ???TITLE??? 是相互排斥的,只能指定一个。
带有可选
user.filter字段的app-config.yaml片段Copy to Clipboard Copied! Toggle word wrap Toggle overflow
user.loadPhotos: true | false默认加载照片。设置为
false以不加载用户 photos。带有可选
user.loadPhotos字段的app-config.yaml片段Copy to Clipboard Copied! Toggle word wrap Toggle overflow
user.select定义要检索的 Microsoft Graph 资源类型。
带有可选
user.select字段的app-config.yaml片段Copy to Clipboard Copied! Toggle word wrap Toggle overflow
userGroupMember.filter使用组成员资格来获取用户。过滤组并获取其成员。这个参数和 ???TITLE??? 是相互排斥的,只能指定一个。
带有可选
userGroupMember.filter字段的app-config.yaml片段Copy to Clipboard Copied! Toggle word wrap Toggle overflow
userGroupMember.search使用组成员资格来获取用户。搜索组并获取其成员。这个参数和 ???TITLE??? 是相互排斥的,只能指定一个。
带有可选
userGroupMember.search字段的app-config.yaml片段Copy to Clipboard Copied! Toggle word wrap Toggle overflow
group.expand可选参数,在结果中包含单一关系(navigation 属性)引用的扩展资源或集合。在一个请求中只能扩展一个关系。请参阅 https://docs.microsoft.com/en-us/graph/query-parameters#expand-parameter 这个参数与 ] 而不是 xref:userFilter[ 结合使用。
带有可选
group.expand字段的app-config.yaml片段Copy to Clipboard Copied! Toggle word wrap Toggle overflow
group.filter过滤组。请参阅 Microsoft Graph API 查询组语法。
带有可选
group.filter字段的app-config.yaml片段Copy to Clipboard Copied! Toggle word wrap Toggle overflow
group.search搜索组。请参阅 Microsoft Graph API 查询搜索参数。
带有可选
group.search字段的app-config.yaml片段Copy to Clipboard Copied! Toggle word wrap Toggle overflow
group.select要定义要检索的 Microsoft Graph 资源类型。
带有可选
group.select字段的app-config.yaml片段Copy to Clipboard Copied! Toggle word wrap Toggle overflow schedule.frequency指定自定义调度频率。支持代码中使用的 cron、ISO 持续时间和"human 持续时间"。
带有可选
schedule.frequency字段的app-config.yaml片段Copy to Clipboard Copied! Toggle word wrap Toggle overflow schedule.timeout指定自定义超时。支持代码中使用的 ISO 持续时间和"human duration"。
带有可选
schedule.timeout字段的app-config.yaml片段Copy to Clipboard Copied! Toggle word wrap Toggle overflow schedule.initialDelay指定自定义初始延迟。支持代码中使用的 ISO 持续时间和"human duration"。
带有可选
schedule.initialDelay字段的app-config.yaml片段Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
检查控制台日志,以验证同步是否已完成。
成功同步示例:
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"}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 Copied! Toggle word wrap Toggle overflow - 使用 Microsoft Azure 帐户登录。