跳到主要内容

配置OAuth认证

PubSub+ 事件代理支持使用 OAuth 2.0 和 OpenID Connect (OIDC) 进行认证,以授予对事件代理的管理访问权限。

您可以在事件代理中以两种方式使用 OAuth 进行管理访问:

  • 交互式:使用 OAuth 对与 PubSub+ Broker Manager 交互的用户进行认证。
  • 自动化:使用 OAuth 令牌作为凭据对来自 SEMPv2 的 REST 请求进行认证。

以下信息描述了配置 OAuth 以实现对事件代理管理访问的交互式选项。要设置使用 SEMPV2 的自动化,请参阅 OAuth 认证.

您应该了解的术语

授权服务器:用户被发送到该服务器进行认证并接收授权代码。

令牌服务器:您提供授权服务器的代码后,从该服务器获取签发的 ID 令牌或访问令牌。请注意,令牌服务器可以根据请求签发访问令牌、ID 令牌或两者。例如,如果事件代理作为客户端(oauth-role client),您可能会收到 ID 令牌和可选的访问令牌。

资源所有者:授予访问资源服务器权限的最终用户。

客户端:请求令牌(ID 令牌或访问令牌)的应用程序,然后将其传递给资源服务器。默认情况下,事件代理充当客户端。在此模式下,resource-server 下的所有配置将被忽略。

资源服务器:接受访问令牌并验证其有效性的服务器。事件代理可以被配置为充当资源服务器。

ID 令牌:由令牌服务器给予客户端的 OpenID Connect ID 令牌,以 JWT 形式表示。

访问令牌:由令牌服务器给予客户端的访问令牌的 URL 编码或 JSON Web Token (JWT) 版本。access-token 格式未指定;从客户端的角度来看,它是一个不透明的数据——客户端对用户没有任何信息。

发现端点:可以用来确定有关 OAuth 身份提供商的信息(包括所有必要的端点和发行者标识符)的端点。

OAuth配置

要实现对事件代理的管理访问的 OAuth 认证,需要以下配置:

  • 事件代理必须通过设置服务器证书来配置使用 TLS。有关更多信息,请参阅管理服务器证书.
  • 必须在事件代理上创建 OAuth 配置文件,并进行以下附加配置:
    • client-id:在事件代理上配置的客户端 ID 必须与 OAuth 客户端 ID 匹配。
    • client-secret:在事件代理上配置的客户端密钥必须与 OAuth 客户端密钥匹配。
    • 端点:最佳实践是:配置 discovery 端点并保留其他端点未设置;或者 保留 discovery 端点未设置并配置其他端点。此外,请在配置过程中仔细考虑端点超时。根据您的部署,默认超时可能太短。

您需要根据要从中获取声明的令牌(id-tokenaccess-token)、您期望从令牌中接收的声明以及是否要在交互式或自动化上下文中使用 OAuth 进行额外配置。额外配置将取决于您的具体设置。以下主题中提供了详细的配置信息。

OAuth配置文件

要实现对事件代理的管理访问的 OAuth 认证,您必须首先创建一个 oauth-profile。每个事件代理最多可以有十个 OAuth 配置文件。

要创建 oauth-profile,请输入以下命令:

solace(configure/authentication)# create oauth-profile <oauth-profile>
solace(configure/authentication/oauth-profile)#

要配置现有配置文件,请输入以下命令:

solace(configure/authentication)# oauth-profile <oauth-profile>

要启用配置文件,请输入以下命令:

solace(configure/authentication/oauth-profile)# no shutdown

要指定默认配置文件,请输入以下命令:

solace(configure/authentication)# oauth-profile-default <profile-name>

其中:

  • <profile-name> 是 OAuth 配置文件的名称。

您可以为 OAuth 配置文件执行的配置任务包括:

  • OAuth 角色
  • 访问级别
  • 端点
  • 客户端
  • 资源服务器
  • 访问级别组声明
  • 客户端 ID
  • 客户端密钥
  • 交互式登录
  • 显示名称
  • 提示过期会话
  • 提示新会话
  • 全局正向代理
  • SEMP
  • 发行者
  • 用户名声明名称

OAuth角色

您可以将事件代理配置为充当 OAuth 客户端或资源服务器。默认情况下,事件代理角色设置为 client。如果 oauth-role 设置为 resource-serverclient scope 不包含 openid scope,则无法将 oauth-role 更改为 client。更改将被拒绝,oauth-role 将保持为 resource-server。在从 resource-server 切换到 client 角色之前,client scope 配置必须包含 openid scope。如果 oauth-role 是客户端,则不需要使用 introspection 端点,也无需配置,同样,如果 oauth-role 是资源服务器,则不会使用 userinfo 端点。

要将事件代理设置为 OAuth 客户端或资源服务器,请输入以下命令:

solace(configure/authentication/oauth-profile)# oauth-role [client | resource-server]

此命令的 no 版本,no oauth-role,将事件代理角色设置为默认的 client 角色.

访问级别

OAuth 组决定了通过使用 OAuth 登录创建的动态用户的访问级别。可以为每个 OAuth 组配置特定的访问级别。用户可能属于多个 OAuth 组,每个组定义的访问级别可能不同.

要为属于给定 OAuth 组的 CLI 用户分配全局访问级别,请输入以下命令:

solace(configure/authentication/oauth-profile)# access-level
solace(...uthentication/oauth-profile/access-level)# create group <group-name>

其中:

  • group-name 是存在于 OAuth 服务器上的 OAuth 组的名称。
  • 要编辑已在事件代理上配置的 OAuth 组的属性,请输入以下命令:solace(...tication/oauth-profile/access-level)# group <group-name>
  • 组名称是区分大小写的,必须与 OAuth 服务器返回的组的大小写匹配.

此命令的 no 版本,no group name <group-name>,会移除给定的组名称.

全局访问级别

要为给定的 OAuth 组分配全局访问级别,请输入以下命令:

solace(...on/oauth-profile/access-level/group)# global-access-level [none | read-only | mesh-manager | read-write | admin]

其中:

  • none 指定全局访问级别为无.
  • read‑only 指定全局访问级别为只读。默认值为只读.
  • mesh-manager 指定全局访问级别为网格管理器.
  • read-write 指定全局访问级别为读写.
  • admin 指定全局访问级别为管理员.

消息VPN默认访问级别

要为属于给定 OAuth 组的 CLI 用户分配消息 VPN 默认访问级别,请输入以下命令:

solace(...on/oauth-profile/access-level/group)# message-vpn
solace(...s/access-level/group/message-vpn)# default-access-level [none | read-only | read-write]

其中:

  • none 指定默认消息 VPN 访问级别为无。默认值为无.
  • read‑only 指定默认消息 VPN 访问级别为只读.
  • read-write 指定默认消息 VPN 访问级别为读写.

消息VPN访问级别异常

要为属于给定 OAuth 组的 CLI 用户配置消息 VPN 访问级别的异常,请输入以下命令:

solace(...rofile/access-level/group/message-vpn)# create access-level-exception <vpn-name> access-level [none | read-only | read-write]

要修改属于给定 OAuth 组的 CLI 用户的现有默认消息 VPN 访问级别异常,请输入以下命令:

solace(...rofile/access-level/group/message-vpn)# access-level-exception <vpn-name> access-level [none | read-only | read-write]

其中:

  • <vpn-name> 是异常将应用于的 Message VPN 的名称.
  • none 指定消息 VPN 访问级别为无。默认值为无.
  • read‑only 指定消息 VPN 访问级别为只读.
  • read-write 指定消息 VPN 访问级别为读写.

此命令的 no 版本,no access-level-exception,移除任何异常,以便 CLI 用户对所有 Message VPN 具有默认的消息 VPN 访问级别.

端点

OAuth 端点是您用于进行认证请求的 URL。所有端点必须使用 TLS。任何不以 https://(不区分大小写)开头的端点将在配置时被拒绝。通过发现确定的端点如果不是 TLS,将在运行时被拒绝.

要配置 OAuth 端点,请输入以下命令:

solace(configure/authentication/oauth-profile)# endpoints

从这个级别,您可以配置以下端点:

solace(configure/authentication/oauth-profile)# [authorization | discovery | discovery-refresh-interval | introspection | introspection-timeout | jwks | jwks-refresh-interval | token | token-timeout | userinfo | userinfo-timeout]

授权端点用于在交互式 OAuth 流程中获取授权代码.

要配置授权端点,请输入以下命令:

solace(configure/authentication/oauth-profile/endpoints)# authorization <value>

其中:

  • <value> 是要设置的授权端点的 URL。

此命令的 no 版本,no authorization,将端点值返回为无.

发现端点

发现端点是 OpenID Connect 发现端点或 OAuth 2.0 授权服务器元数据端点。通常,这是您需要配置的唯一端点,因为该端点提供了有关 OAuth 发行者和其他所有端点的信息。最佳实践是:配置 discovery 端点并保留其他端点未设置;或者 保留 discovery 端点未设置并配置其他端点.

要配置发现端点,请输入以下命令:

solace(configure/authentication/oauth-profile/endpoints)# discovery <value>

其中:

  • <value> 是发现 URL。

此命令的 no 版本,no discovery <value>,将端点值返回为无.

发现刷新间隔端点

发现刷新间隔端点用于配置 discovery 端点请求之间的秒数。

要配置发现刷新间隔请求,请输入以下命令:

solace(configure/authentication/oauth-profile/endpoints)# discovery-refresh-interval <value>

其中:

  • <value>discovery 端点请求之间的秒数。

此命令的 no 版本,discovery-refresh-interval,将其值返回为默认的 86400 秒(1 天).

Introspection 端点

令牌 introspection 端点返回与访问令牌标识的用户相关的声明。

要配置 introspection 端点,请输入以下命令:

solace(configure/authentication/oauth-profile/endpoints)# introspection <value>

其中:

  • <value> 是 OAuth introspection 端点的 URI。仅支持 HTTPS。如果您指定了 HTTPS 地址,则必须在事件代理上配置证书和证书颁发机构。有关更多信息,请参阅管理服务器证书.

此命令的 no 版本,no introspection,将端点值返回为无.

Introspection 超时端点

配置 introspection 超时端点是令牌 introspection 请求允许发生的最大时间(以秒为单位)。

要配置 introspection 超时端点,请输入以下命令:

solace(configure/authentication/oauth-profile/endpoints)# introspection-timeout <value>

其中:

  • <value> 是要设置的秒数。

此命令的 no 版本,no introspection-timeout,将其值返回为 1 秒.

JWKS 端点

为了验证 ID 和访问令牌,事件代理需要访问公钥。这些密钥可以从 OAuth 身份提供商的 JSON Web Key Set (JWKS) 端点获得。该端点可以显式配置或从发现文档中确定。jwks 端点返回用于验证来自 OAuth 身份提供商的 JSON Web Tokens (JWTs) 的密钥。事件代理从该 URL 获取这些密钥以验证令牌签名并缓存。

要配置 JWKS 端点,请输入以下命令:

solace(configure/authentication/oauth-profile/endpoints)# jwks <value>

其中:

  • <value>jwks 端点的 URI。仅支持 HTTPS。如果您指定了 HTTPS 地址,则必须在事件代理上配置证书和证书颁发机构。有关更多信息,请参阅管理服务器证书.

此命令的 no 版本,no jwks,将端点值返回为无.

JWKS 刷新间隔

默认情况下,PubSub+ 事件代理每二十四小时刷新一次从 OAuth 授权服务器获得的任何 JWKS 公钥。

密钥也会在以下情况发生时刷新:

  • 刷新间隔发生变化。
  • JWKS 端点发生变化。
  • 发行者发生变化。
  • OAuth 配置文件被启用。
  • 事件代理被重启。

每经过 jwks-refresh-interval,事件代理将刷新密钥集。如果事件代理尝试刷新密钥并且请求失败,则执行以下重试:

  • 如果缺少有效数据,则每 60 秒无限重试。
  • 如果存在有效数据,则每 60 秒重试三次。事件代理将停止并等待下一个计划的刷新或数据过期。

此外,JWKS 密钥在比 jwks-refresh-interval 旧三倍时过期。

要配置 JWKS 刷新间隔,请输入以下命令:

solace(configure/authentication/oauth-profile/endpoints)# jwks-refresh-interval <value>

其中:

  • <value> 是强制公钥刷新之间的秒数。

此命令的 no 版本,no jwks-refresh-interval,将其值返回为默认的 86400 秒(1 天).

令牌端点

令牌端点用于在交互式 OAuth 授权码授权流程中获取 ID 令牌和访问令牌。

要配置令牌端点,请输入以下命令:

solace(configure/authentication/oauth-profile/endpoints)# token <value>

其中:

  • <value> 是令牌服务器的 URL。

此命令的 no 版本,no token,将端点值返回为无.

令牌超时端点

使用令牌超时端点,您可以设置令牌请求允许发生的最大时间(以秒为单位)。

在决定如何配置此值时要仔细考虑。一方面,根据您的网络速度,默认的一秒可能太短,无法完成令牌请求。另一方面,较长的超时可能会导致性能问题,因为请求队列会堆积。

要配置令牌超时端点,请输入以下命令:

solace(configure/authentication/oauth-profile/endpoints)# token-timeout <value>

其中:

  • <value> 是令牌请求允许发生的时间(以秒为单位)。

此命令的 no 版本,no token,将其值返回为默认值 1 秒.

用户信息端点

用户信息端点是 OpenID Connect 标准(OIDC)的一部分,旨在返回有关认证用户的信息。在 ID 令牌可能不包含所有所需声明的情况下使用该端点,此时使用访问令牌检索用户信息。

要配置用户信息端点,请输入以下命令:

solace(configure/authentication/oauth-profile/endpoints)# userinfo <value>

其中:

  • <value> 是用户信息端点的 URL。

此命令的 no 版本,no userinfo,将端点值返回为无.

用户信息超时端点

使用用户信息超时端点,您可以设置用户信息请求允许发生的最大时间。

要配置用户信息超时端点,请输入以下命令:

solace(configure/authentication/oauth-profile/endpoints)# userinfo-timeout <value>

其中:

  • <value> 是用户信息请求允许发生的时间(以秒为单位)。

此命令的 no 版本,no userinfo-timeout,将其值返回为默认值 1 秒.

客户端

客户端是希望访问资源服务器数据的应用程序。它是请求授权服务器的访问令牌或 ID 令牌,然后将其传递给令牌服务器以获取数据访问权限的应用程序。

要配置事件代理上的 OAuth 客户端设置,请输入以下命令:

solace(configure/authentication/oauth-profile)# client
solace(...e/authentication/oauth-profile/client)#

从这个级别,您可以配置以下设置:

solace(...e/authentication/oauth-profile/client)# [allowed-host | authorization-parameter | redirect-uri | required-type | scope | validate-type]

允许的主机

允许的主机是配置为给定事件代理的允许的 Host 头部值的 host:port 组合。当前的最佳实践是将主机名配置为完全限定域名。每个 OAuth 配置文件最多可以配置四个 allowed-host.

要创建允许的主机,请输入以下命令:

solace(configure/authentication/oauth-profile/client)# create allowed-host <host>

其中:

  • <host> 是 Host 头部的允许主机值。

此命令的 no 版本,no allowed-host <host>,删除配置的允许主机值.

授权参数

您可以添加要传递给 OAuth 授权端点的额外参数。每个 OAuth 配置文件最多可以添加四个额外的授权参数。授权参数名称必须是唯一的,并且是区分大小写的。

要添加额外的授权参数,请输入以下命令:

solace(configure/authentication/oauth-profile/client)# create authorization-parameter <para-name>

要修改现有的授权参数,请输入以下命令:

solace(configure/authentication/oauth-profile/client)# authorization-parameter <para-name>

其中:

  • <para-name> 是授权参数的名称。

此命令的 no 版本,no authorization-parameter <para-name>,删除配置的参数.

重定向URI

重定向 URI 是授权服务器在应用程序成功授权后将用户发送到的端点。虽然通常需要设置 allowed-host,但设置重定向 URI 并不是必要的。如果未设置重定向 URI,则事件代理使用浏览器提供的主机值来创建正确的值。在使用此设置之前,我们建议您联系 Solace.

要配置重定向 URI,请输入以下命令:

solace(configure/authentication/oauth-profile/client)# redirect-uri <value>

其中:

  • <value> 是要设置的 redirect-uri 的 URL。

此命令的 no 版本,no redirect-uri <value>,将端点值返回为无.

所需类型

ID 令牌头部所需的格式类型。默认值为 JWT.

要配置所需类型值,请输入以下命令:

solace(configure/authentication/oauth-profile/client)# required-type <value>

其中:

  • <value> 是要设置的 required-type 的值。

此命令的 no 版本,no required-type <value>,将其值返回为 JWT.

范围

范围是 OAuth 2.0 中用于限制应用程序对用户账户访问的机制。它用于启动支持 OpenID Connect 的 OAuth 流程。事件代理将范围参数传递给 OAuth 授权端点。默认范围是 openid email。如果 oauth-role 是客户端,则将范围更改为不包含 openid 的值是错误的,并且更改将被拒绝。如果 oauth-role 设置为 resource-servervalidate-scope 为 true,则响应中返回的范围值必须验证包含 required-scope 中指定的所有范围值。

要配置范围参数,请输入以下命令:

solace(configure/authentication/oauth-profile/client)# scope <value>

其中:

  • <value> 是要设置的 scope 的空格分隔值列表。

此命令的 no 版本,no scope <value>,将其值返回为默认的 openid email.

验证类型

validate-type 参数验证令牌 ID 类型。默认情况下,它设置为 true。如果 validate-type 为 true,则没有 typ 头部字段的令牌将无法验证。通常,大多数 OAuth 身份提供商将 typ 设置为 JWT。此外,如果启用 validate-type(默认),JWT 头部中的 typ 字段必须与 required-type 中配置的值匹配。

要配置验证类型参数,请输入以下命令:

solace(configure/authentication/oauth-profile/client)# validate-type

此命令的 no 版本,no validate,将默认值(true)更改为 false.

所需声明

您可以在事件代理中配置所需声明以验证 ID 令牌。在 required-claim 下指定的所有声明必须完全匹配。required-claim 值以 JSON 形式指定,可以是字符串、数字或任意 JSON 对象。每个 OAuth 配置文件最多可以配置四个所需声明。

要创建所需声明,请输入以下命令:

solace(configure/authentication/oauth-profile/client)# create required-claim <name> <value>

其中:

  • <name> 是要验证的 ID 令牌声明的名称。声明名称必须是唯一的,并且是区分大小写的。
  • <value> 是所需声明值,必须是包含有效 JSON 值的字符串。

此命令的 no 版本,no required-claim <value>,删除配置的声明.

资源服务器

在 OAuth 流程中,资源服务器接受访问令牌并验证其有效性。只有当 oauth-role 是资源服务器时,resource-server 下的配置才有效。

要配置 OAuth 资源服务器设置,请输入以下命令:

solace(configure/authentication/oauth-profile)# resource-server
solace(...e/authentication/oauth-profile/resource-server)#

从这个级别,您可以配置以下设置:

solace(...e/authentication/oauth-profile/resource-server)# [parse-access-token | required-audience | required-claim | required-issuer | required-scope | required-type | validate-audience | validate-issuer | validate-scope | validate-type]

解析访问令牌

您可以启用或禁用将访问令牌作为 JWT 解析。默认情况下它是启用的。当 parse-access-token 启用时,访问令牌被检查以确定它是否包含用户名和组的指定声明。如果它包含这两个声明,则不需要进一步处理,并使用适当声明的值。但是,如果提供了 introspection 端点(直接或通过发现),即使令牌包含用户名和组,也会检查每个访问令牌。如果 parse-access-token 禁用,则必须指定 introspection-endpoint.

要禁用默认的 parse-access-token,请输入以下命令:

solace(configure/authentication/oauth-profile/resource-server)# no parse-access-token

所需类型

访问令牌头部所需的格式类型。默认值为 JWT.

要配置所需类型值,请输入以下命令:

solace(configure/authentication/oauth-profile/client)# required-type <value>

其中:

  • <value> 是要设置的 required-type 的值。

此命令的 no 版本,no required-type <value>,将其值返回为 JWT.

所需受众

您可以配置事件代理以验证客户端提供的所需受众参数。如果 aud 声明是字符串,则 required-audience 值必须与 aud 声明匹配;如果 aud 声明是字符串数组,则必须与 aud 声明的值之一匹配。如果 required-audience 值不正确,事件代理将拒绝连接尝试。

要配置 OAuth 所需受众值,请输入以下命令:

solace(...e/authentication/oauth-profile/resource-server)# required-audience <value>

此命令的 no 版本,no required-audience <value>,将其值返回为无.

所需声明

您可以在事件代理中配置所需声明以验证访问令牌或 introspection 响应。在 required-claim 下指定的所有声明必须完全匹配。required-claim 值以 JSON 形式指定,可以是字符串、数字或任意 JSON 对象。每个 OAuth 配置文件最多可以配置 8 个所需声明。

要创建所需声明,请输入以下命令:

solace(configure/authentication/oauth-profile/resource-server)# create required-claim <name> <value>

其中:

  • <name> 是要验证的 id-token 声明的名称。声明名称必须是唯一的,并且是区分大小写的。
  • <value> 是所需声明值,必须是包含有效 JSON 值的字符串。

此命令的 no 版本,no required-claim <value>,删除配置的声明.

所需发行者

您可以配置事件代理中的所需发行者声明值,作为验证访问令牌或 introspection 响应的一部分。配置的 required-issuer 值必须与 iss 声明匹配。如果未指定 required-issuer,则使用 discovery 端点的 issuer 来验证 iss 声明。

要配置所需发行者声明,请输入以下命令:

solace(configure/authentication/oauth-profile/resource-server)# required-issuer <value>

其中:

  • <value> 是要配置的所需发行者声明的值。

此命令的 no 版本,no required-claim <value>,将其值返回为无.

所需范围

所需范围是必须存在于 scope 声明中的空格分隔范围列表。scope 声明必须包含 required-scope 中的所有值,但可以包含其他范围,并且范围可以以不同的顺序出现。如果 required-scope 为空或未设置,则不执行 scope 验证。

要在事件代理上配置所需范围,请输入以下命令:

solace(configure/authentication/oauth-profile/resource-server)# required-scope <value>

其中:

  • <value> 是要配置的所需发行者声明的值。

此命令的 no 版本,no required-scope <value>,将其值返回为无.

验证受众

您可以配置事件代理以验证受众参数,以验证访问令牌或 introspection 响应中的 aud 声明。默认情况下,此功能是启用的。如果禁用 validate-audience,则不执行 required-audience 验证。如果启用,则执行 required-audience 中描述的验证。

要配置事件代理以验证受众声明,请输入以下命令:

solace(configure/authentication/oauth-profile/resource-server)# validate-audience

此命令的 no 版本,no validate-audience,禁用它.

验证发行者

您可以配置事件代理以验证发行者参数,以验证访问令牌或 introspection 响应中的 iss 声明。默认情况下,此功能是启用的。如果禁用 validate-issuer,则不执行 required-issuer 验证。如果启用,则执行 required-issuer 中描述的验证。

要配置事件代理以验证发行者声明,请输入以下命令:

solace(configure/authentication/oauth-profile/resource-server)# validate-issuer

此命令的 no 版本,no validate-issuer,禁用它.

验证范围

您可以配置事件代理以验证范围参数,以验证访问令牌或 introspection 响应中的 scope 声明。默认情况下,此功能是启用的。如果禁用 validate-scope,则不执行 required-scope 验证。如果启用,则执行 required-scope 中描述的验证。

要配置事件代理以验证范围声明,请输入以下命令:

solace(configure/authentication/oauth-profile/resource-server)# validate-scope

此命令的 no 版本,no validate-scope,禁用它.

验证类型

您可以配置事件代理以验证范围参数,以验证访问令牌头部中的 typ 字段。默认情况下,此功能是启用的。如果禁用 validate-type,则不执行 required-type 验证。如果启用,则执行 required-type 中描述的验证。

要配置事件代理以验证 typ 字段,请输入以下命令:

solace(configure/authentication/oauth-profile/resource-server)# validate-type

此命令的 no 版本,no validate-type,禁用它.

访问级别组声明

访问级别组声明名称是包含事件代理将用于授权用户的组的声明的名称。在执行所有适当的令牌验证后,事件代理将根据 access-level-groups-claim-name 确定 OAuth 组。

要配置访问级别组声明名称,请输入以下命令:

solace(configure/authentication/oauth-profile)# access-level-groups-claim-name <value>

其中:

  • <value> 是用于确定访问级别组的令牌中的字段。如果没有提供值,则使用 groups 作为默认值。在使用 JWT 时,声明名称必须位于 JWT 的顶层。换句话说,它们不能嵌套。此外,您希望用作访问级别组的任何声明的值必须是字符串或字符串数组。

在这个示例中,“aclevGroupClaim” 字段用于确定访问级别组,其值是字符串“abcdefghi”:

{
...
"aclevGroupClaim": "abcdefghi",
...
}

在这个示例中,“aclevGroup” 字段用于确定授权组,其值是字符串数组 [“a b c”, “def”, “ghi”]。事件代理将此数组解释为三个授权组,“a b c”(包括空格)、“def” 和 “ghi”。

{
...
"aclevGroup": ["a b c", "def", "ghi"],
...
}

此命令的 no 版本,no access-level-groups-claim-name,将其值返回为默认的 groups.

为了兼容性,您可以配置事件代理将声明的字符串值解释为以空格分隔的组集,类似于 scope 声明。例如,声明值为“a b c”将被解释为三个组:“a”、“b” 和 “c”。

要配置此行为,请输入以下命令:

solace(configure/authentication/oauth-profile)# access-level-groups-claim-string-format space-delimited

此命令的 no 版本,no access-level-groups-claim-string-format,将其值返回为默认的 single.

客户端ID

当客户端在 OAuth 身份提供商处注册时,他们会收到客户端 ID 和客户端密钥。这些基本上相当于用户名和密码,授权服务器使用它们来认证应用程序。client-id 识别负责 OAuth 请求的客户端。

要在您的事件代理上配置客户端 ID,请输入以下命令:

solace(configure/authentication/oauth-profile)# client-id <value>

其中:

  • <value> 是 OAuth 提供的客户端 ID。

此命令的 no 版本,no client-id,将其值返回为无.

客户端密钥

当客户端在 OAuth 身份提供商处注册时,他们会收到客户端 ID 和客户端密钥。这些基本上相当于用户名和密码,授权服务器使用它们来认证应用程序。

要在您的事件代理上配置客户端密钥,请输入以下命令:

solace(configure/authentication/oauth-profile)# client-secret <value>

其中:

  • <value> 是 OAuth 提供的客户端密钥。

此命令的 no 版本,no client-secret,将其值返回为无.

交互式登录

交互式登录选项用于认证与 Broker Manager 或任何使用 SEMPv2 的基于浏览器的 Web 应用程序交互的用户。该功能默认启用。禁用该功能将禁用使用 Broker Manager 时的 OAuth 登录。

要禁用通过 OAuth 的交互式登录,请输入以下命令:

solace(configure/authentication/oauth-profile)# no interactive

显示名称

您可以配置一个友好的显示名称,用作您的 OAuth 登录配置文件。如果没有配置 display-name,则使用 OAuth 配置文件名称。

要配置您的 OAuth 配置文件的显示名称,请输入以下命令:

solace(configure/authentication/oauth-profile)# display-name <value>

其中:

  • <value> 是要配置的显示名称。

此命令的 no 版本,no display-name <value>,将其值返回为无.

提示过期会话

当 OAuth 会话已过期(不是新会话或已注销)时,可以使用提示过期会话重新登录。

要为 OAuth 配置文件配置提示过期会话,请输入以下命令:

solace(configure/authentication/oauth-profile)# prompt-for-expired-session <value>

其中:

  • <value> 是提供给 OAuth 授权服务器的提示参数值,用于会话已过期的登录请求。

此命令的 no 版本,no prompt-for-expired-session <value>,将其值返回为无.

提示新会话

提示新会话用于新的 OAuth 会话或用户明确注销后重新登录。

要为 OAuth 配置文件配置提示新会话,请输入以下命令:

solace(configure/authentication/oauth-profile)# prompt-for-new-session <value>

其中:

  • <value> 是提供给 OAuth 授权服务器的提示参数值,用于新会话或用户明确注销的登录请求。

此命令的 no 版本,no prompt-for-new-session <value>,将其值返回为无.

全局正向代理

根据您的部署,您可能需要事件代理与授权服务器之间的通信通过全局正向代理。如果您的事件代理位于防火墙之后,并且出站流量需要连接到代理服务器才能通过防火墙,则通常是这种情况。

要为 OAuth 配置文件配置全局正向代理,请输入以下命令:

solace(configure/authentication/oauth-profile)# proxy <proxy-name>

其中:

  • <proxy-name> 是在事件代理上配置的全局正向代理的名称,用于发现、令牌、用户信息和 introspection 请求。有关更多信息,请参阅全局正向代理配置.

此命令的 no 版本,no proxy,移除任何配置的全局正向代理.

SEMP

这是 OAuth 配置文件的 SEMP 设置,用于控制是否可以使用该配置文件对 SEMPv2 调用中的承载令牌进行认证。该功能默认启用。要了解有关与 SEMPv2 配置 OAuth 的更多信息,请参阅 OAuth 认证.

要配置 OAuth 用于 SEMP,请输入以下命令:

solace(configure/authentication/oauth-profile)# semp <value>

此命令的 no 版本,no semp,禁用使用 OAuth 认证 SEMPv2 请求的能力.

发行者

发行者是授权服务器的标识符。如果已配置 discovery 端点,则 issuer 标识符将自动从 discovery 端点确定.

要配置发行者标识符,请输入以下命令:

solace(configure/authentication/oauth-profile)# issuer <value>

其中:

  • <value> 是发行者标识符的值。如果已配置,该值将在发现端点中可用。

此命令的 no 版本,no issuer <value>,将其值返回为无.

用户名声明名称

用户名声明名称是包含事件代理验证的用户名的 claim 的名称。您可以配置自定义 username-claim-name,它必须是字符串;例如,email。不支持其他类型的声明,如数字、布尔值、对象、数组等。

要配置用户名声明名称,请输入以下命令:

solace(configure/authentication/oauth-profile)# username-claim-name <value>

其中:

  • <value>username-claim-name 的名称。

此命令的 no 版本,no username-claim-name <value>,将其值返回为默认的 sub.

管理访问的OAuth示例配置

以下示例展示了如何配置事件代理上的 OAuth 认证以实现管理访问,事件代理充当 client

在此示例中,假设发现端点包含以下信息:

  • Issuer
  • Authorization Endpoint
  • JWKS Endpoint
  • Token Endpoint
  • Userinfo Endpoint
solace(configure/authentication)# create oauth-profile solace
solace(configure/authentication/oauth-profile)# client-id 863072204556-uf9jkn4i08429rsu91ejmi51ve5arjc1.apps.solace.com
solace(configure/authentication/oauth-profile)# client-secret 83nw9OsXglnbyrU7ZjUyvSRK
solace(configure/authentication/oauth-profile)# username-claim-name email
solace(configure/authentication/oauth-profile)# endpoints
solace(configure/authentication/oauth-profile/endpoints)# discovery https://accounts.solace.com/.well-known/openid-configuration
solace(configure/authentication/oauth-profile/endpoints/discovery)# exit
solace(configure/authentication/oauth-profile)# no shutdown
solace(configure/authentication/oauth-profile)# client
solace(...e/authentication/oauth-profile/client)# create allowed-host my.pubsubplus.manager.url:1943
solace(...e/authentication/oauth-profile/client)# exit
solace(configure/authentication/oauth-profile)# access-level-groups-claim-name my_groups_claim_name
solace(configure/authentication/oauth-profile)# access-level
solace(...entication/oauth-profile/access-level)# create group my_admin_group_claim_value
solace(...tion/oauth-profile/access-level/group)# global-access-level admin
solace(...entication/oauth-profile/access-level)# create group my_read_only_group_claim_value
solace(...tion/oauth-profile/access-level/group)# global-access-level read-only

一旦在事件代理上成功配置了 OAuth,Broker Manager 的登录屏幕上会出现一个新的登录按钮。点击该按钮将自动通过 OAuth 身份提供商登录到 Broker Manager。有关访问 Broker Manager 的更多信息,请参阅访问 Broker Manager.