第 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 帐户登录。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat