ADC

作为 OAuth IdP 的 NetScaler

现在可以使用 OpenID-Connect (OIDC) 协议将 NetScaler 配置为身份提供者。OIDC 协议增强了 NetScaler 的身份提供能力。现在,您可以通过单点登录访问企业级托管应用程序,因为 OIDC 通过不传输用户密码而是使用具有特定生命周期的令牌来提供更高的安全性。OpenID 还设计用于与非浏览器客户端(例如应用程序和服务)集成。因此,许多实施方案广泛采用了 OIDC 协议。

注意

NetScaler 必须在 12.1 或更高版本上使用 OIDC 协议作为 OAuth IdP 运行。

将 NetScaler 作为 OAuth IdP 的优势

  • 消除了维护多个身份验证密码的开销,因为用户在整个组织中拥有单个身份。
  • 为密码提供了强大的安全性,因为密码仅与身份提供商共享,而不是与您访问的任何应用程序共享。
  • 提供与各种系统的广泛互操作性,使托管应用程序更容易接受 OpenID。

注意

要使解决方案正常运行,需要 NetScaler Advanced Edition 及更高版本。

使用 GUI 将 NetScaler 配置为 OAuth IdP

  1. 创建身份验证 OAuth IdP 策略。

    • 导航到 安全 > AAA-应用程序流量 > 策略 > 身份验证 > 高级策略 > OAuth IDP> 策略
    • 在“策略”下,单击“添加”。
    • 在“创建身份验证 OAuth IDP 策略”页面上,为以下参数设置值,然后单击“创建”。

      • 名称:身份验证策略的名称。
      • 操作:适用于与此策略匹配的请求或连接的身份验证 OAuth IdP 配置文件的名称。有关详细步骤,请参阅步骤 2。
      • 日志操作:请求与此策略匹配时要使用的消息日志操作的名称。有关详细步骤,请参阅步骤 3。此字段为可选字段。
      • 未定义结果操作:策略评估结果未定义时要执行的操作。未定义的事件表示内部错误情况。可用操作有“DROP”和“RESET”。此字段为可选字段。
      • 表达式:策略用于响应特定请求的高级表达式。有关策略和表达式的更多信息,请参阅 策略和表达式
  2. 创建身份验证 OAuth IdP 操作。

    • 在“创建身份验证 OAuth IDP 策略”页面上,单击“操作”字段中的“添加”。
    • 在出现的“创建身份验证 OAuth IDP 配置文件”页面上,为以下参数设置值,然后单击“创建”。

      • 名称:新 OAuth IdP 单点登录配置文件的名称。
      • 客户端 ID:请求身份验证的依赖方的唯一身份。允许的最大长度为 127 个字符。
      • 客户端机密:用于在授权服务器上授权信赖方的唯一密钥字符串。允许的最大长度为 239 个字符。
      • 重定向 URL:需要将 OAuth 令牌发送到的信赖方 URL 端点。允许的最大长度为 255 个字符。
      • 颁发者名称:在 NetScaler 向 IdP 发送的请求中使用的名称,用于唯一标识 NetScaler。允许的最大长度为 127 个字符。
      • 受众:IdP 发送的令牌的目标收件人。这是代表收件人的实体名称或 URL。允许的最大长度为 127 个字符。
      • 偏移时间:此选项指定 NetScaler IdP 发送的令牌的有效期限。例如,如果将倾斜时间设置为 10 分钟,则令牌的有效期为(当前时间减去 10)分钟到(当前时间加 10)分钟;总共 20 分钟。默认持续时间为 5 分钟。
      • 默认身份验证组:组已添加到会话的内部组列表中。这对于管理员在 nFactor 流程中确定信赖方的配置非常有用。它可以在身份验证策略的表达式 AAA.USER.IS_MEMBER_OF("group name") 中用于识别依赖方相关的 nFactor 流。允许的最大长度为 63 个字符。
      • 信赖方元数据 URL:NetScaler IdP 可以在其中获取有关正在配置的信赖方的详细信息的端点。元数据响应必须包括依赖方公钥的 jwks_uri 的端点。允许的最大长度为 255 个字符。
      • 刷新间隔:刷新信赖方元数据的间隔。
      • 签名服务:选择此选项可在 NetScaler IdP 发送令牌时对令牌进行加密。
      • 属性:要插入到 ID 令牌中的属性名称-值对。配置格式为 name=value_expr@@@name2=value2_expr@@@@@@ 格式用作名称/值对之间的分隔符。
      • 发送密码:选择此选项可发送 ID 令牌中的加密密码。
  3. 创建审核消息操作。
    • 在“创建身份验证 OAuth IDP 策略 ”页面上,单击“日志操作”字段中的“添加”。
    • 在“创建审核消息操作”页上,为以下参数设置值,然后单击“创建”。
      • 名称:审核消息操作的名称。
      • 日志级别:审核日志级别,它指定正在生成的日志消息的严重性级别。
      • 表达式:定义日志消息格式和内容的默认语法表达式。
      • 登录 newnslog:将消息发送到新的 NSLOG 服务器。
  4. 创建身份验证 OAuth 服务器。

    • 导航到安全 > AAA-应用程序流量 > 策略 > 身份验证 > 高级策略 > 操作 > OAUTH 操作,然后单击添加
    • 在“创建身份验证 OAuth 服务器”页面上,设置所需参数的值,然后单击“创建”。
  5. 将 OAuth IdP 策略绑定到身份验证 OAuth 服务器。

OAuth 功能现在支持来自信赖方 (RP) 端以及 NetScaler Gateway 和 NetScaler 的 IdP 端的令牌 API 中的以下功能。

  • PKCE(代码交换的证明密钥)支持

  • 支持 client_assertion

使用 CLI 使用 OIDC 协议将 NetScaler 配置为 IdP

在命令提示符下,键入以下命令:

add authentication OAuthIDPProfile <name> [-clientID <string>][-clientSecret ][-redirectURL <URL>][-issuer <string>][-audience <string>][-skewTime <mins>] [-defaultAuthenticationGroup <string>]

add authentication OAuthIdPPolicy <name> -rule <expression> [-action <string>] [-undefAction <string>] [-comment <string>][-logAction <string>]

add authentication ldapAction aaa-ldap-act -serverIP 10.0.0.10 -ldapBase "dc=aaa,dc=local"

ldapBindDn <administrator@aaa.local> -ldapBindDnPassword <password> -ldapLoginName sAMAccountName

add authentication policy aaa-ldap-adv-pol -rule true -action aaa-ldap-act

bind authentication vserver auth_vs -policy <ldap_policy_name> -priority 100 -gotoPriorityExpression NEXT

bind authentication vserver auth_vs -policy <OAuthIDPPolicyName> -priority 5 -gotoPriorityExpression END

bind vpn global –certkey <>
<!--NeedCopy-->

备注:

  • 可以绑定多个密钥。绑定的证书的公共部分是为了响应 jwks\_uri query (https://gw/oauth/idp/certs)

  • OAuth IdP 内省端点支持属性 active: true

  • 如果将身份验证虚拟服务器配置为 OAuth IdP,则必须将众所周知的 OAuth IdP 发现端点 URL 配置为 https://<netscaler-oauth-idp-fqdn>/oauth/idp/.well-known/openid-configuration

  • 配置为 OAuth IdP 的 NetScaler 在发送给 OAuth SP 的 .well-known-Endpoint 响应中不显示 client_secret_postclient_secret_jwtprivate_key_jwtclient_secret_basic 令牌端点身份验证方法。

OIDC 协议上的加密令牌支持

采用 OIDC 机制的 NetScaler 现在支持发送加密令牌和签名令牌。NetScaler 使用 JSON 网络加密规范来计算加密令牌,并且仅支持加密令牌的紧凑序列化。要加密 OpenID 令牌,NetScaler 需要依赖方 (RP) 的公钥。公钥是通过轮询信赖方的已知配置端点动态获取的。

在“authentication OAuthIDPProfile.”配置文件中引入了一个新的“relyingPartyMetadataURL”选项。

使用 CLI 配置信赖方的终端节点

在命令提示符下,键入:

set authentication OAuthIDPProfile <name> [-relyingPartyMetadataURL <URL>] [-refreshInterval <mins>] [-status < >]
<!--NeedCopy-->
  • relyingPartyMetadataURL - NetScaler IdP 可以通过该端点获取有关正在配置的信赖方的详细信息。元数据响应必须包括 RP 公钥的 jwks_uri 的终端节点。

  • refreshInterval - 定义必须轮询此终端节点才能在几分钟内更新证书的速率。

  • status -反映轮询操作的状态。一旦 NetScaler 成功获取公钥,状态即已完成。

示例:

set authentication OAuthIDPProfile sample_profile -relyingPartyMetadataURL https://rp.customer.com/metadata -refreshInterval 50 -status < >
<!--NeedCopy-->

配置端点后,NetScaler 首先轮询依赖方的知名端点以读取配置。当前,NetScaler 仅处理“jwks_uri”端点。

  • 如果响应中没有“jwks_uri”,则说明配置文件的状态不完整。
  • 如果响应中存在“jwks_uri”,NetScaler 也会轮询该端点以读取信赖方的公钥。

注意:

令牌加密仅支持 RSAES-OAEP 和 AES256 GCM 加密类型算法。

OpenID Connect 上的自定义属性支持

OpenID 依赖方可能需要令牌中的用户名或用户主体名称 (UPN) 以创建用户配置文件或做出授权决策。最常见的是,用户组需要为用户应用授权策略。有时,预配用户帐户需要更多详细信息,例如名字或姓氏。

配置为 IdP 的 NetScaler 可用于使用表达式在 OIDCid_token 中发送额外的属性。高级策略表达式用于根据要求发送自定义属性。NetScaler OAuth IdP 会评估与属性对应的表达式,然后计算出最终的令牌。

NetScaler 会自动在输出数据中应用 JSONify。例如,数字(如 SSN)或布尔值(true 或 false)不用引号括起来。多值属性(例如组)位于数组标记(“[”和“]”)中。复杂类型属性不会自动计算,您可以根据您的要求配置这些复杂值的 PI 表达式。

使用 CLI 配置信赖方的终端节点

在命令提示符下,键入:

set oauthidpprofile <name> -attributes <AAA-custom-attribute-pattern>
<!--NeedCopy-->

<AAA-custom-attribute-pattern> 可以描述为:

Attribute1=PI-Expression@@@attribute2=PI-Expression@@@

‘attribute1’,’attribute2’ 是文字字符串,它们表示要插入到ID令牌中的属性的名称。

注意:

在以下示例中,"q{myname=http.req.user.name@@@ssn="123456789"@@@jit="false"@@@groups=http.req.user.groups}" 表达式的最大值可以是 2000 字节。它包含 4 个自定义属性(myname、ssn、jit、groups)。每个自定义属性的最大值为 10000 字节。例如,组属性(根据 PI 表达式 http.req.user.groups 计算)在 OIDCid_token 中最多可以包含 10000 字节的数据。

示例: set oauthidpprofile sample_1 -attributes "q{myname=http.req.user.name@@@ssn="123456789"@@@jit="false"@@@groups=http.req.user.groups}"

  • 前面的 PI 表达式是一个高级策略表达式,表示要针对属性使用的值。PI 表达式可用于发送字符串文字,例如“硬编码字符串”。字符串字面量在单引号周围用双引号包围,或者在起始模式(起始模式为 "q()")周围用双引号包围。如果属性的值不是字符串文字,则表达式在运行时进行评估,其值以令牌形式发送。如果运行时的值为空,则不会将相应的属性添加到 ID 令牌中。
  • 如示例中定义的那样,“false”是属性“jit”的字面字符串。另外,ssn 具有硬编码值供参考。组和“myname”是产生字符串的 PI 表达式。

支持 NetScaler Gateway 上的主动-主动 GSLB 部署

使用 OIDC 协议配置为身份提供程序 (IdP) 的 NetScaler Gateway 可以支持主动-主动 GSLB 部署。在 NetScaler Gateway IdP 上部署的主动 GSLB 提供了在多个地理位置对传入的用户登录请求进行负载平衡的功能。

重要

我们建议您将 CA 证书绑定到 SSL 服务,并在 SSL 服务上启用证书验证以增强安全性。 有关配置 GSLB 设置的更多信息,请参阅 GSLB 设置和配置示例

作为 OAuth IdP 的 NetScaler