第 8 章 在 RHOSO 中配置联邦身份验证


红帽支持红帽的单点登录(SSO)技术作为 OpenShift (RHOSO)上 Red Hat OpenStack Services 的身份提供程序。如果您使用其他厂商,请联系红帽支持例外。

8.1. 使用单点登录联邦 IDP 部署 RHOSO

联邦允许用户使用红帽单点登录(SSO)技术登录 OpenStack Dashboard (horizon)。

注意

默认情况下,注销 OpenStack 控制面板的用户不会从 SSO 注销。

使用单点登录联邦解决方案需要修改 Identity 服务(keystone)。您可以使用一个 secret 在 OpenShift (RHOSO) Identity 服务上配置 Red Hat OpenStack Services,以集成到您的联邦身份验证解决方案中。

注意

您的联邦客户端必须启用隐式流。

先决条件

  • 已安装 RHOSO。
  • 在您的环境中有一个 SSO 联合解决方案。

流程

  1. 检索 Identity 服务(keystone)端点:

    oc get keystoneapis.keystone.openstack.org -o json | jq '.items[0].status.apiEndpoints.public'
  2. 为 SSO 管理员提供以下重定向 URI 和 Web 来源:

    https://<keystoneURL>/v3/auth/OS-FEDERATION/identity_providers/<idp_name>/protocols/openid/websso/
    https://<keystoneURL>/v3/auth/OS-FEDERATION/websso/openid
    
    webOrigins: https://<keystoneURL>
    • <keystoneURL > 替换为在第 1 步中获取的 URL。此 url 必须以末尾的 / 结尾处。
    • <idp_name > 替换为您选择的值,如 kcipaIDP

      作为响应,您的 SSO 管理员为您提供了 ClientIDClientSecret

      注意

      所选 & lt;idp_name& gt; 值必须与此流程中所有引用的 <idp_name > 值匹配。

  3. 检索 Memcached 主机名:

    1. 对于 IPv4 部署,请运行以下命令:

      oc get memcacheds.memcached.openstack.org -n openstack -o json | jq -r '.items[0].status.serverList[0] | split(":")[0]'
    2. 对于 IPv6 部署,运行以下命令:

      oc get memcacheds.memcached.openstack.org -n openstack -o json | jq -r '.items[0].status.serverListWithInet[0]'
  4. 创建 keystone-httpd-override.yaml CR 文件并添加以下配置:

    apiVersion: v1
    kind: Secret
    metadata:
      name: keystone-httpd-override
      namespace: openstack
    type: Opaque
    stringData:
      federation.conf: |
        # Example OIDC directives for the *public* endpoint
        OIDCClaimPrefix "OIDC-"
        OIDCScope "openid email profile"
        OIDCClaimDelimiter ";"
        OIDCPassUserInfoAs "claims"
        OIDCPassClaimsAs "both"
        OIDCClientID "<my_client_id>" 
    1
    
        OIDCClientSecret "<my_client_secret>" 
    2
    
        OIDCCryptoPassphrase "<crypto_pass>" 
    3
    
        OIDCProviderMetadataURL <metadata_url> 
    4
    
        OIDCResponseType "id_token" 
    5
    
        OIDCOAuthClientID "my_oauth_client_id"
        OIDCOAuthClientSecret "12345678"
        OIDCOAuthIntrospectionEndpoint "<https://my_oauth_introspection_endpoint>" 
    6
    
        OIDCRedirectURI "{{ .KeystoneEndpointPublic }}/v3/auth/OS-FEDERATION/identity_providers/<idp_name>/protocols/openid/websso/" 
    7
    
    
        <LocationMatch "/v3/auth/OS-FEDERATION/identity_providers/<idp_name>/protocols/openid/websso">
            AuthType "openid-connect"
            Require valid-user
        </LocationMatch>
    
        <Location ~ "/v3/OS-FEDERATION/identity_providers/<idp_name>/protocols/openid/auth">
            AuthType oauth20
            Require valid-user
        </Location>
    
        <LocationMatch "/v3/auth/OS-FEDERATION/websso/openid">
            AuthType "openid-connect"
            Require valid-user
        </LocationMatch>
    1
    <my_client_id > 替换为您的客户端 ID,以用于 OpenID Connect 供应商握手。您必须从 SSO 管理员获取它。
    2
    <my_client_secret > 替换为用于 OpenID Connect 供应商握手的客户端 secret。在提供重定向 URL 后,您必须从 SSO 管理员获取它。
    3
    <crypto_pass > 替换为在加密 OpenID Connect 握手数据时使用的安全密码短语。这是一个用户定义的值。
    4
    <metadata_url > 替换为指向 OpenID Connect 供应商元数据的 URL。使用格式:"https://<FQDN>/realms/<realm>/.well-known/openid-configuration。SSO 管理员将为 OpenID 供应商提供所需的 &lt ;FQDN& gt; 和特定于机构的 <realm > 名称。
    5
    OpenID Connect 供应商中预期的响应类型。
    6
    使用 SSO 管理员提供的值替换 https://my_oauth_introspection_endpoint
    7
    <idp_name > 替换为您创建的唯一重定向 URL 的字符串,例如 kcipaIDP。对于 keystoneFederationIdentityProviderName 参数和 LocationMatchLocation 指令参数,必须替换这个值。
    重要

    OIDCRedirectURI 参数的完整值必须以尾随 / 结尾。

  5. 创建 secret:

    oc create -f keystone-httpd-override.yaml
  6. 获取 OpenStack 仪表板的 URL:

    oc get horizons.horizon.openstack.org -o json | jq -r '.items[0].status.endpoint'
  7. 编辑 OpenStackControlPlane CR 文件的 keystone 部分并添加 secret:

    keystone:
      template:
        customServiceConfig: |
          [federation]
          trusted_dashboard=<horizon_endpoint>/dashboard/auth/websso/ 
    1
    
          [openid]
          remote_id_attribute=HTTP_OIDC_ISS
          [auth]
          methods = password,token,oauth1,mapped,application_credential,openid 
    2
    
        httpdCustomization:
          customConfigSecret: keystone-httpd-override 
    3
    1
    <horizon_endpoint > 替换为在第 6 步中获取的值。
    2
    确保将 external 从此值列表中删除。
    3
    httpdCustomization 下添加 customConfigSecret 参数,并将其值设置为 keystone-httpd-override.yaml CR 文件中创建的键。
  8. 编辑 OpenStackControlPlane CR 文件的 horizon 部分,以配置 OpenStack Dashboard (horizon):

    horizon:
      template:
        customServiceConfig: |
          # Point Horizon to the Keystone public endpoint
          OPENSTACK_KEYSTONE_URL = "<keystone_endpoint>/v3" 
    1
    
    
          # Enable WebSSO in Horizon
          WEBSSO_ENABLED = True
    
          # Provide login options in Horizon's dropdown menu
          WEBSSO_CHOICES = (
            ("credentials", _("Keystone Credentials")),
            ("OIDC", _("OpenID Connect")),
          )
    
          # Map Horizon's "OIDC" choice to the Keystone IDP and protocol
          WEBSSO_IDP_MAPPING = {
            "OIDC": ("<idp_name>", "openid"), 
    2
    
          }
    1
    <keystone_endpoint > 替换为您在第一步中获取的值。
    2
    <idp_name > 替换为您选择的字符串,它会创建一个唯一的重定向 URL,例如 kcipaIDP
  9. 更新 control plane:

    $ oc apply -f openstack_control_plane.yaml -n openstack
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部