搜索

第 12 章 管理 OpenID Connect 和 SAML 客户端

download PDF

客户端是可以请求用户进行身份验证的实体。客户端以两种形式提供。第一种类型的客户端是希望参与单点登录的应用程序。这些客户端只希望 Red Hat Single Sign-On 为它们提供安全。另一种类型的客户端是请求访问令牌,以便它能够代表经过身份验证的用户调用其他服务。本节讨论配置客户端以及执行它的各种方法。

12.1. OIDC 客户端

OpenID Connect 是用来保护应用程序的推荐协议。它从基础上设计为非常友好,它最适合使用 HTML5/JavaScript 应用程序。

12.1.1. 创建 OpenID Connect 客户端

为了保护使用 OpenID 连接协议的应用程序,您可以创建一个客户端。

流程

  1. 点菜单中的 Clients
  2. Create 进入 Add Client 页面。

    添加客户端

    Add Client

  3. 为客户端 ID 输入任何名称。
  4. 在客户端 协议 下拉菜单中选择 openid-connect
  5. Root URL 字段中输入应用程序的基本 URL。
  6. Save

此操作会创建客户端,并将您带到 Settings 选项卡。

客户端设置

Client Settings

其他资源

12.1.2. 基本设置

当您创建 OIDC 客户端时,您可以在 Settings 标签页中看到以下字段。

客户端 ID
OIDC 请求和 Red Hat Single Sign-On 数据库中使用的 alpha-numeric ID 字符串来识别客户端。
Name
Red Hat Single Sign-On UI 屏幕中的客户端名称。要本地化名称,请设置替换字符串值。例如,字符串值,如 ${myapp}。如需更多信息,请参阅 服务器开发人员指南
描述
客户端的描述。此设置也可以本地化。
Enabled
关闭后,客户端无法请求身份验证。
需要同意
在打开后,用户会看到一个授权页面,他们可用于授予该应用程序的访问权限。它还会显示元数据,以便用户知道用户可以访问的确切信息。
访问类型
OIDC 客户端的类型。
机密
对于执行浏览器登录并要求客户端 secret 在发出访问令牌请求时的服务器端客户端。此设置应该用于服务器端应用程序。
公开
对于执行浏览器登录的客户端。由于无法确保 secret 可以与客户端客户端保持安全,因此务必要通过配置正确的重定向 URI 来限制访问。
bearer-only
应用只允许 bearer 令牌请求。开启后,此应用无法参与浏览器登录。
启用标准流
启用后,客户端可以使用 OIDC 授权代码流
隐式流已启用
启用后,客户端可以使用 OIDC Implicit Flow
启用直接访问
启用后,客户端可以使用 OIDC Direct Access Grants
启用 OAuth 2.0 设备授权
如果这样做,则允许客户端使用 OIDC 设备授权授权
OpenID Connect Client Initiated Backchannel Authentication Enabled
如果出现这种情况,则允许客户端使用 OIDC 客户端初始频道身份验证Grant
Root URL
如果 Red Hat Single Sign-On 使用任何配置的相对 URL,则会在其前面加上这个值。
有效的 Redirect URI

必填字段.输入 URL 模式,再单击 + 来添加和 - 来删除现有 URL,然后单击保存。确切的(区分大小写)字符串匹配用于比较有效的重定向 URI。

您可以在 URL 模式末尾使用通配符。例如 http://host.com/path/*。为避免安全问题,如果传递的重定向 URI 包含 userinfo 部分或其路径 来管理对 父目录的访问(/../),则不会执行通配符比较,但标准和安全匹配的字符串匹配。

完整的通配符 * 有效重定向 URI 也可以配置为允许任何 httphttps 重定向 URI。请不要在生产环境中使用它。

专用重定向 URI 模式通常更安全。如需更多信息 ,请参阅 未知的重定向 URI

基本 URL
当 Red Hat Single Sign-On 需要链接到客户端时,会使用这个 URL。
管理员 URL
客户端的回调端点。服务器使用此 URL 进行回调,如推送撤销策略、执行回频道注销和其他管理操作。对于 Red Hat Single Sign-On servlet 适配器,这个 URL 可以是 servlet 应用的根 URL。如需更多信息,请参阅 保护应用程序和服务指南

徽标 URL

引用客户端应用程序徽标的 URL。

策略 URL

Relying 客户端向 End-User 提供相关 URL 来阅读如何使用配置集数据。

服务 URL 条款

重复客户端为最终用户提供的 URL,可阅读有关相应服务条款的 URL。

Web Origins

输入 URL 模式并点击 + 来添加和 - 删除现有的 URL。点 Save

此选项处理 跨资源共享(CORS)。如果浏览器 JavaScript 尝试 AJAX HTTP 请求到域不同于 JavaScript 代码来自的服务器,请求必须使用 CORS。服务器必须处理 CORS 请求,否则浏览器不会显示或允许处理请求。这个协议可防止 XSS、CSRF 和其他基于 JavaScript 的攻击。

这里列出的域 URL 嵌入到发送到客户端应用程序的访问令牌中。客户端应用使用此信息来确定是否允许在其上调用 CORS 请求。只有 Red Hat Single Sign-On 客户端适配器只支持此功能。如需更多信息 ,请参阅保护应用程序和服务指南

前端频道注销
如果启用了 Front Channel Logout,则应用程序应该可以根据 OpenID Connect Front-Channel Logout 规格通过前端频道注销用户。如果启用,您还应提供 Front-Channel Logout URL
front-Channel Logout URL
Red Hat Single Sign-On 将通过前端频道向客户端发送注销请求的 URL。
Backchannel Logout URL
当注销请求发送到这个域(通过 end_session_endpoint)时,会导致客户端自己注销的 URL。如果省略,则不会向客户端发送注销请求。

12.1.3. 高级设置

当您点 Advanced Settings 时,会显示其他字段。

OAuth 2.0 Mutual TLS Certificate Bound Access Tokens Enabled

注意

要在 Red Hat Single Sign-On 中启用 mutual TLS,请参阅在 WildFly 中启用 mutual SSL

Mutual TLS 将访问令牌和刷新令牌与客户端证书绑定,后者在 TLS 握手期间交换。这个绑定可防止攻击者使用 stolen 令牌。

这种类型的令牌是持有密钥令牌的拥有者。与 bearer 令牌不同的是,持有者令牌的接收者是否可以验证令牌的发件人是否合法。

如果这个设置位于,则工作流为:

  1. 令牌请求在授权代码流或混合流中发送到令牌端点。
  2. 红帽单点登录请求客户端证书。
  3. Red Hat Single Sign-On 接收客户端证书。
  4. 红帽单点登录成功验证客户端证书。

如果验证失败,红帽单点登录会拒绝令牌。

在以下情形中,Red Hat Single Sign-On 将验证客户端发送访问令牌或刷新令牌:

  • 令牌刷新请求发送到令牌端点,并带有拥有者(key)刷新令牌。
  • UserInfo 请求会发送到 userInfo 端点,其具有拥有者(key)访问令牌。
  • 注销请求发送到 Logout 端点,并带有拥有者(key)刷新令牌。

如需了解更多详细信息,请参阅 OAuth 2.0 Mutual TLS 客户端身份验证和证书 Bound Access Tokens 中的 Mutual TLS Client Certificate Bound Access Tokens。

注意

目前,Red Hat Single Sign-On 客户端适配器不支持拥有者密钥令牌验证。红帽单点登录适配器将访问和刷新令牌视为 bearer 令牌。

OIDC 的高级配置

OpenID Connect 的 Advanced Settings 允许您在客户端级别上配置 会话和令牌超时的覆盖

Advanced Settings

Configuration描述

访问令牌 Lifespan

该值会覆盖名称相同的 realm 选项。

客户端会话识别

该值会覆盖名称相同的 realm 选项。该值应小于全局 SSO 会话空闲

客户端会话最大

该值会覆盖名称相同的 realm 选项。该值应小于全局 SSO Session Max

客户端离线会话 Idle

此设置允许您为客户端配置较短的离线会话闲置超时。超时是 Red Hat Single Sign-On 撤销其离线令牌前会话闲置的时间长度。如果没有设置,则使用 realm Offline Session Idle

客户端离线会话最大

此设置允许您为客户端配置较短的离线会话最大生命周期。生命周期是红帽单点登录撤销对应的离线令牌前的最长时间。这个选项需要在域中全局启用 Session Max Limited,默认为 Offline Session Max

代码交换代码挑战方法验证密钥

如果攻击者破坏合法客户端的授权代码,则代码交换的概念验证密钥(PKCE)可防止攻击者获得应用到代码的令牌。

管理员可以选择以下选项之一:

(空白)
除非客户端向红帽单点登录授权端点发送适当的 PKCE 参数,否则 Red Hat Single Sign-Ons 不适用于 PKCE。
S256
Red Hat Single Sign-On 适用于客户端 PKCE,其代码质询方法是 S256。
plain
Red Hat Single Sign-On 适用于客户端 PKCE,其代码质询方法是纯的。

如需了解更多详细信息,请参阅 OAuth 公共客户端代码交换的 RFC 7636 证明密钥

已签名和加密 ID 令牌支持

红帽单点登录可以根据 Json Web 加密(JWE)规范加密 ID 令牌。管理员决定是否为每个客户端配置了 ID 令牌。

用于加密 ID 令牌的密钥是内容加密密钥(CEK)。Red Hat Single Sign-On 和客户端必须协商使用 CEK 以及它的交付方式。用于确定 CEK 的方法是密钥管理模式。Red Hat Single Sign-On 支持的密钥管理模式是密钥加密。

在密钥加密中:

  1. 客户端生成非对称加密密钥对。
  2. 公钥用于加密 CEK。
  3. Red Hat Single Sign-On 会为每个 ID 令牌生成 CEK
  4. Red Hat Single Sign-On 使用这个生成的 CEK 加密 ID 令牌
  5. Red Hat Single Sign-On 使用客户端的公钥加密 CEK。
  6. 客户端使用其私钥解密这个加密的 CEK
  7. 客户端使用解密的 CEK 来解密 ID 令牌。

除客户端外,没有方可以解密 ID 令牌。

客户端必须将其公钥用于加密 CEK 到 Red Hat Single Sign-On。Red Hat Single Sign-On 支持从客户端提供的 URL 下载公钥。客户端必须根据 Json Web Keys (JWK) 规范提供公钥。

此过程是:

  1. 打开客户端的 Keys 选项卡。
  2. JWKS URL 切换到 ON。
  3. JWKS URL textbox 中输入客户端的公钥 URL。

密钥加密算法在 Json Web Algorithm (JWA) 规范中定义。Red Hat Single Sign-On 支持:

  • RSAES-PKCS1-v1_5(RSA1_5)
  • RSAES OAEP 使用默认参数(RSA-OAEP)
  • RSAES OAEP 256 使用 SHA-256 和 MFG1 (RSA-OAEP-256)

选择算法的步骤是:

  1. 打开客户端的 Settings 选项卡。
  2. Open Fine Grain OpenID Connect 配置.
  3. ID Token Encryption Content Encryption Algorithm 下拉菜单中选择算法。

ACR 到身份验证级别(LoA)映射

在客户端的高级设置中,您可以定义哪个 身份验证上下文类参考(ACR) 值映射到哪些 级别的身份验证(LoA )。此映射也可以在 ACR 到 LoA Mapping 所述的域中指定。最佳实践是在 realm 级别配置此映射,它允许在多个客户端间共享相同的设置。

Default ACR Values 可用于指定在从此客户端发送到 Red Hat Single Sign-On 时的默认值,而无需 acr_values 参数,且没有附加了 acr claim 的声明参数。请参阅 不使用 OIDC 动态客户端注册规格

警告

请注意,默认的 ACR 值用作默认级别,但无法可靠使用特定级别强制登录。例如,假设您将 Default ACR 值 配置为级别 2。默认情况下,用户需要使用级别 2 进行验证。但是,当用户将参数显式附加到登录请求时,如 acr_values=1 时,将使用级别 1。因此,如果客户端真正需要级别 2,则鼓励客户端检查 ID Token 内部是否存在 acr 声明,并再次检查它包含请求的级别 2。

ACR to LoA mapping

详情请查看 Step-up Authenticationthe offical OIDC specification

12.1.4. 机密客户端凭证

如果客户端的 访问类型设为 机密,必须在 Credentials 选项卡下配置客户端的凭据。

凭证标签页

Credentials Tab

Client Authenticator 下拉列表指定要用于客户端的凭证类型。

客户端 ID 和机密

这个选择是默认设置。为您自动生成 secret,点 Regenerate Secret 会根据需要重新创建 secret。

签名的 JWT

client credentials jwt

签名的 JWT "Signed Json Web 令牌"。

在选择此凭证类型时,您还需要在标签 键中为客户端生成私钥和证书 私钥将用于为 JWT 签名,而证书则供服务器用于验证签名。

keys 标签页

client oidc keys

点击 Generate new key and certificate 按钮启动此过程。

生成密钥

generate client keys

  1. 选择您要使用的归档格式。
  2. 输入 密钥密码
  3. 输入 存储密码
  4. Generate and Download

生成密钥时,Red Hat Single Sign-On 将存储证书并下载您的客户端的私钥和证书。

您还可以使用外部工具生成密钥,然后点 Import Certificate 导入客户端证书。

导入证书

Import Certificate

  1. 选择证书的归档格式。
  2. 输入存储密码。
  3. 单击 Import File,选择证书文件。
  4. Import

如果点击 Use JWKS URL,则不需要导入证书。在这种情况下,您可以提供以 JWK 格式发布公钥的 URL。使用此选项时,如果密钥被改变,Red Hat Single Sign-On 会重新导入密钥。

如果您使用由 Red Hat Single Sign-On 适配器保护的客户端,您可以使用以下格式配置 JWKS URL,假设 https://myhost.com/myapp 是客户端应用程序的根 URL:

https://myhost.com/myapp/k_jwks

如需了解更多详细信息,请参阅 服务器开发人员指南

警告

Red Hat Single Sign-On 会缓存 OIDC 客户端的公钥。如果您的客户端的私钥被破坏,请更新您的密钥并清除密钥缓存。如需了解更多详细信息 ,请参阅清除 cache 部分。

使用客户端 Secret 签名 JWT

如果选择此选项,您可以使用由客户端 secret 签名的 JWT,而不使用私钥。

客户端机密将用于由客户端为 JWT 签名。

X509 证书

Red Hat Single Sign-On 在 TLS Handshake 中验证客户端是否使用正确的 X509 证书。

注意

这个选项需要在 Red Hat Single Sign-On 中需要 mutual TLS。请参阅 WildFly 中启用 mutual SSL

X509 证书

x509 client auth

验证器还使用配置的 regexp 验证表达式检查证书的 Subject DN 字段。对于某些用例,就可以接受所有证书。在这种情况下,您可以使用 (.*?) (?:$) 表达式。

Red Hat Single Sign-On 有两种方法以从请求获取客户端 ID:

12.1.5. 客户端机密轮转

注意

客户端 Secret 轮转 是技术预览,不被完全支持。此功能默认为禁用。

要使用 -Dkeycloak.profile=preview-Dkeycloak.profile.feature.client_secret_rotation=enabled 来启用服务器。如需了解更多详细信息,请参阅 配置文件

对于具有 机密 访问类型的客户端,红帽单点登录支持通过客户端 策略 轮转客户端 secret 的功能。???

客户端 secret 轮转策略提供了更大的安全性,以缓解 secret 泄漏等问题。启用后,Red Hat Single Sign-On 支持每个客户端最多两个并发活跃 secret。策略会根据以下设置管理轮转:

  • Secret expiration: [seconds] - 当 secret 被轮转时,这是新 secret 的过期时间。添加到 secret 创建日期 中的 量(以秒为单位)。在策略执行时间计算.
  • 轮转 secret 过期: [秒] - 当 secret 被轮转时,这个值是旧 secret 的剩余过期时间。这个值应该始终小于 Secret 过期。当值为 0 时,在客户端轮转过程中立即删除旧 secret。添加到 secret 轮转日期 中的 量(以秒为单位)。在策略执行时间计算.
  • 剩余的更新期间轮转的过期时间: [秒] - 当更新到动态客户端时,应该执行客户端 secret 轮转。在策略执行时间计算.

当出现客户端 secret 轮转时,会生成新的主 secret,而旧客户端主 secret 就会使用新的过期日期成为二级 secret。

12.1.5.1. 客户端 secret 轮转规则

轮转不会自动或通过后台进程发生。要执行轮转,客户端需要更新操作,可以通过 Red Hat Single Sign-On Admin Console 的功能(在客户端的凭证标签页或 Admin REST API 中通过 Regenerate Secret 的功能)。在调用客户端更新操作时,secret 轮转会根据规则进行:

  • Secret 过期 值小于当前日期时。
  • 在动态客户端注册客户端更新请求时,如果 更新期间 Remaining expiration 时间的值与当前日期与 Secret 到期 间的周期相匹配,客户端 secret 会自动轮转

另外,管理员 REST API 可以随时强制进行客户端 secret 轮转。

注意

在创建新客户端时,如果客户端 secret 轮转策略处于活跃状态,则会自动应用此行为。

警告

要将 secret 轮转行为应用到现有客户端,请在定义策略后更新该客户端,以便应用此行为。

12.1.6. 创建 OIDC 客户端 Secret Rotation 策略

以下是定义 secret 轮转策略的示例:

流程

  1. 点左侧菜单中的 Realm Settings
  2. Client Policies 标签页。
  3. 在 Profiles Page 上,点 Create

    创建配置集

    Create Client Profile

  4. 名称 输入任意名称。
  5. 输入描述,以帮助您确定 描述 的配置集用途。
  6. Save

    此操作会创建配置集,并可让您配置 executors。

  7. Create 为这个配置集配置 executor。

    创建配置集 executors

    Client Profile Executor

  8. Executor Type 选择 secret-rotation
  9. Secret Expiration 输入每个 secret 的最长持续时间时间(以秒为单位)。
  10. Rotated Secret Expiration 输入每个轮转 secret 的最长持续时间时间(以秒为单位)。

    警告

    请记住,轮转 Secret 过期 值必须始终小于 Secret Expiration

  11. 输入时间(以秒为单位)后,任何更新操作都会更新 Remain Expiration Time 的客户端。
  12. Save

    注意

    在上例中:

    • 每个 secret 只在一周内有效。
    • 轮转 secret 在两天后过期。
    • 更新动态客户端的窗口将在机密到期前一天启动。
  13. 返回到 Client Policies 选项卡。
  14. Policies
  15. Create

    创建 Client Secret Rotation 策略

    Client Rotation Policy

  16. 名称 输入任意名称。
  17. 输入描述,帮助您确定 描述 的策略的用途。
  18. Save

    此操作会创建策略,并允许您将策略与配置集关联。它还允许您配置策略执行的条件。

  19. 在 Conditions 下,点 Create

    创建 Client Secret Rotation Policy Condition

    Client Rotation Policy Condition

  20. 要将行为应用到所有机密客户端,请在 Condition Type 字段中选择 client-access-type

    注意

    要应用到特定的一组客户端,另一种方法是选择 Condition Type 字段中的 client-roles 类型。这样,您可以创建特定的角色,并为每个角色分配自定义轮转配置。

  21. 将机密 添加到 字段 Client Access Type
  22. Save
  23. 返回到在 Add client 配置集选择菜单中的 Client Profiles 下的策略设置,选择之前创建的配置集 Weekly Client Secret Rotation Profile

Client Secret Rotation 策略

Client Rotation Policy

注意

要将 secret 轮转行为应用到现有客户端,请按照以下步骤执行:

使用管理控制台

  1. 转至一些客户端。
  2. 转至" 凭证 "选项卡。
  3. 点击 Re-generate secret

使用客户端 REST 服务可以通过两种方式执行:

  • 通过客户端上的更新操作
  • 通过重新生成客户端 secret 端点

12.1.7. 使用服务帐户

每个 OIDC 客户端都有一个内置 服务帐户。使用 此服务帐户 获取访问令牌。

流程

  1. 点菜单中的 Clients
  2. 选择您的客户端。
  3. Settings 选项卡。
  4. 将客户端的 Access Type 设置为 机密
  5. 服务帐户已启用 切换到 ON
  6. Save
  7. 配置 您的客户端凭据
  8. Scope 选项卡。
  9. 验证您有角色或切换 完整范围允许 ON
  10. Service Account Roles 选项卡
  11. 配置可用于此客户端的角色。

访问令牌的角色是以下的交集:

  • 客户端的角色范围映射和从链接的客户端范围映射中继承的角色范围映射。
  • 服务帐户角色.

要调用的 REST URL 是 /auth/realms/{realm-name}/protocol/openid-connect/token。这个 URL 必须以 POST 请求形式调用,并要求您使用请求发布客户端凭证。

默认情况下,客户端凭证由 Authorization: Basic 标头中的客户端的 clientId 和 clientSecret 表示,但您也可以使用签名的 JWT 断言或客户端身份验证的其他自定义机制验证客户端。

您还需要根据 OAuth2 规格将 grant_type 参数设置为 "client_credentials"。

例如,POST 调用以检索服务帐户,如下所示:

    POST /auth/realms/demo/protocol/openid-connect/token
    Authorization: Basic cHJvZHVjdC1zYS1jbGllbnQ6cGFzc3dvcmQ=
    Content-Type: application/x-www-form-urlencoded

    grant_type=client_credentials

从 OAuth 2.0 规范中,响应与此 Access Token 响应 类似。

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache

{
    "access_token":"2YotnFZFEjr1zCsicMWpAA",
    "token_type":"bearer",
    "expires_in":60
}

默认情况下,仅返回访问令牌。默认情况下,不会返回刷新令牌,在 Red Hat Single Sign-On side 上不创建用户会话。由于缺少刷新令牌,在访问令牌过期时需要重新身份验证。但是,这种情形并不意味着红帽单点登录服务器的额外开销,因为默认不会创建会话。

在这种情况下,注销是不必要的。但是,通过将请求发送到 OAuth2 Revocation Endpoints 部分所述,可以撤销颁发的访问令牌。

其他资源

如需了解更多详细信息,请参阅 客户端凭证授予

12.1.8. 受众支持

通常,部署红帽单点登录的环境由一组使用 Red Hat Single Sign-On 进行身份验证的 保密公共客户端 应用程序组成。

服务 ( OAuth 2 规范中的资源服务器 )还可以为来自客户端应用程序的请求提供服务,并为这些应用程序提供资源。这些服务需要向它们发送访问令牌(Bearer 令牌)来验证请求。此令牌在登录 Red Hat Single Sign-On 后由 frontend 应用获取。

在服务间信任较低的环境中,您可能会遇到这种情况:

  1. 前端客户端应用程序需要针对 Red Hat Single Sign-On 进行身份验证。
  2. 红帽单点登录验证用户。
  3. 红帽单点登录向应用程序签发令牌。
  4. 该应用使用令牌来调用不受信任的服务。
  5. 不受信任的服务会返回对应用程序的响应。但是,它会保留应用程序令牌。
  6. 然后,不受信任的服务使用应用令牌调用可信服务。这会导致安全性损坏,因为不受信任的服务滥用令牌以代表客户端应用程序访问其他服务。

这种情境在服务间有高信任但并不是信任较低的环境的环境中不太可能出现。在某些环境中,这个工作流可能正确,因为不受信任的服务可能需要从可信服务检索数据,以将数据返回到原始客户端应用。

在服务之间存在高度信任时,一个无限制的受众很有用。否则,受众应限制。您可以限制使用者和同时,允许不受信任的服务从可信服务检索数据。在这种情况下,请确保将不受信任的服务和可信服务添加为令牌的受众。

为防止访问令牌的任何滥用,请限制令牌上的使用者,并配置您的服务来验证令牌上的使用者。流会按如下方式改变:

  1. frontend 应用通过 Red Hat Single Sign-On 进行身份验证。
  2. 红帽单点登录验证用户。
  3. 红帽单点登录向应用程序签发令牌。应用程序知道需要调用不受信任的服务,以便它将 scope=<untrusted service&gt; 放置到发送到 Red Hat Single Sign-On 的身份验证请求中(请参阅 Client Scopes 部分 以了解更多有关 scope 参数的详细信息)。

    给应用程序发布的令牌包含对其受众提供的不受信任的服务的引用("audience": [ "<untrusted service>" ]),该令牌声明了客户端使用此访问令牌调用不受信任的服务。

  4. 不可信服务使用令牌调用可信服务。调用不成功,因为受信任的服务会检查令牌上的使用者,并且发现其受众只针对不受信任的服务。这个行为是正常的,安全没有被破坏。

如果客户端想要稍后调用可信服务,它必须通过使用 范围 =<受信任的服务>重新运行 SSO 登录来获取另一个令牌。然后,返回的令牌会将可信服务作为受众包含在内:

"audience": [ "<trusted service>" ]

使用这个值调用 < trusted service>

12.1.8.1. 设置

设置受众检查时:

  • 通过添加 标志在适配器配置中添加 verify-token-audience,确保服务被配置为检查发送的访问令牌的使用者。详情请参阅 Adapter 配置
  • 确保红帽单点登录发布的令牌包含所有必要的受众。可以使用客户端角色添加使用者,如下一部分所述或硬编码。???请参阅 硬编码的使用者

12.1.8.2. 自动添加受众

Audience Resolve protocol mapper 在默认的客户端范围 角色 中定义。映射器会检查至少一个可用于当前令牌的客户端角色。然后,每个客户端的客户端 ID 会被添加为受众,如果您的服务(通常为 bearer-only)客户端依赖于客户端角色,这很有用。

例如,对于仅限 bearer 的客户端和机密客户端,您可以使用为机密客户端发布的访问令牌来调用仅 bearer 的客户端 REST 服务。如果满足,则仅限 bearer 的客户端作为使用者自动添加到为机密客户端发布的访问令牌中。

  • bearer-only 客户端本身定义了任何客户端角色。
  • 目标用户至少分配了其中一个客户端角色。
  • 机密客户端具有所分配角色的角色范围映射。
注意

如果要确保受众没有自动添加,请不要在机密客户端上配置角色范围映射。反之,您可以创建一个专用的客户端范围,其中包含专用客户端范围范围的角色范围映射。

假设客户端范围作为可选客户端范围添加到机密客户端,客户端角色和受众将会在令牌中明确请求,则将添加到令牌中。

注意

前端客户端本身不会自动添加到访问令牌受众,从而允许轻松地区分访问令牌和 ID 令牌,因为访问令牌将不包含作为受众发布令牌的客户端。

如果您需要客户端本身作为使用者,请参阅 硬编码的 audience 选项。但是,不建议使用与 frontend 和 REST 服务相同的客户端。

12.1.8.3. 硬编码的受众

如果您的服务依赖于 realm 角色,或者不依赖于令牌中的角色,那么使用硬编码的受众会很有用。硬编码的使用者是一个协议映射程序,它将将指定服务客户端的客户端 ID 添加为令牌的使用者。如果要使用与客户端 ID 不同的受众,您可以使用任何自定义值,如 URL。

您可以将协议映射程序直接添加到 frontend 客户端。如果直接添加协议映射程序,那么还将始终添加听众。

如需更多对 protocol mapper 的控制,您可以在专用客户端范围内创建协议映射程序,该范围将调用,如 good服务

受众协议映射程序

audience mapper

  • 良好 服务的 Installation 选项卡中,您可以生成适配器配置,您可以确认 verify-token-audience 选项将设置为 true。这在您使用此配置时,会强制适配器验证受众。
  • 您需要确保机密客户端能够在其令牌中以使用者请求 良好的服务

    在机密客户端上:

    1. Client Scopes 选项卡。
    2. good服务 分配为可选(或默认)客户端范围。

      如需了解更多详细信息 ,请参阅客户端范围链接部分

  • 您可以选择 评估客户端范围 并生成示例访问令牌。如果将 good-service 包含在 scope 参数中,如果将 good服务作为可选客户端范围,则服务 将添加到生成的访问令牌的受众中。
  • 在您的机密客户端应用程序中,确保使用 scope 参数。当您要发布令牌以访问良好服务 时,必须包括值 good-service

    请参阅:

注意

默认情况下,A udience 和 Audience Resolve 协议映射器会将受众仅添加到访问令牌中。ID 令牌通常仅包含单个受众,以及发出令牌的客户端 ID,这是 OpenID Connect 规格的要求。但是,访问令牌不一定具有客户端 ID,而这是发出的令牌,除非使用者映射程序被添加。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.