ADC

作为 SAML SP 的 NetScaler

SAML 服务提供商 (SP) 是由服务提供商部署的 SAML 实体。当用户尝试访问受保护的应用程序时,SP 将评估客户端请求。如果客户端未经身份验证(没有有效的 NSC_TMAA 或 NSC_TMAS cookie),SP 会将请求重定向到 SAML 身份提供程序 (IdP)。

SP 还会验证从 IdP 收到的 SAML 断言。

当 NetScaler 设备配置为 SP 时,流量管理虚拟服务器(负载平衡或内容交换)会接收与相关 SAML 操作关联的所有用户请求。

NetScaler 设备还支持注销期间的 POST 和重定向绑定。

注意

在部署中,在设备或任何外部 SAML IdP 上配置 SAML IdP 时,NetScaler 设备可以用作 SAML SP。

用作 SAML SP 时,NetScaler 设备:

  • 可以从 SAML 令牌中提取用户信息(属性)。然后,可以在在 NetScaler 设备上配置的策略中使用此信息。例如,如果您想提取 GroupMember 和 emailaddress 属性,请在 SAMLAction 中,将 Attribute2 参数指定为 GroupMember,将 Attribute3 参数指定为 emailaddress

    注意

    不得在属性 1—16 中提取用户名、密码和注销 URL 等默认属性,因为这些属性是隐式解析并存储在会话中。

  • 可以从传入 SAML 断言中提取最多 127 个字节的属性名称。之前的限制是 63 个字节。

  • 支持发布、重定向和伪影绑定。

    注意

    当膨胀或解码后的断言大于 10K 时,不要对大量数据使用重定向绑定。

  • 可以解密断言。

  • 可以从 SAML 断言中提取多值属性。发送的这些属性是嵌套的 XML 标记,例如:

    <AttributeValue> <AttributeValue>Value1</AttributeValue> <AttributeValue>Value2</AttributeValue> \</AttributeValue\>

    注意

    在 NetScaler 13.0 Build 63.x 及更高版本中,SAML 属性的单个最大长度已增加到允许的最大长度为 40k 字节。所有属性的大小不得超过 40k 字节。

    在提供之前的 XML 时,NetScaler 设备可以将 Value1 和 Value2 作为给定属性的值提取,与仅提取 Value1 的旧固件相反。

  • 可以指定 SAML 断言的有效性。

    如果 NetScaler SAML IdP 上的系统时间与对等 SAML SP 上的系统时间不同步,则任何一方都可能使消息失效。为了避免此类情况,您现在可以配置断言有效的持续时间。

    此持续时间称为“偏移时间”,它指定了可以接受消息的分钟数。可以在 SAML SP 和 SAML IdP 上配置倾斜时间。

  • 可以在身份验证请求中向外部 IdP(身份提供程序)发送名为“ForceAuth”的额外属性。默认情况下,ForceAuthn 设置为“False”。可以将其设置为“True”以建议 IdP 在存在身份验证上下文的情况下强制进行身份验证。此外,配置了工件绑定时,NetScaler SP 会在查询参数中发出身份验证请求。

使用 CLI 将 NetScaler 设备配置为 SAML SP

  1. 配置 SAML SP 操作。

    示例

    以下命令添加了一项 SAML 操作,用于重定向未经身份验证的用户请求。

    add authentication samlAction SamlSPAct1 -metadataUrl "https://ksidp1.ksaaa.local/metadata/samlidp/SAML_IDP_profile" -samlIdPCertName nssp -samlSigningCertName nssp –samlRedirectUrl https://auth1.example.com -relaystateRule "AAA.LOGIN.RELAYSTATE.EQ(\"https://lb.example1.com/\")"

    注意事项

    • 为 samlAction 命令中的 -samlIdPCertName 提供的证书必须与来自 IdP 的相应证书匹配才能成功验证签名。
    • SAML 仅支持 RSA 证书。不支持 HSM 和 FIPS 等其他证书。
    • 建议在表达式中使用带有“/”结尾的完整域名。
    • 如果将身份验证虚拟服务器配置为 SAML IdP,则必须在 SAML SP 操作中使用的元数据 URL 为 https://<netscaler-saml-idp-fqdn>/metadata/samlidp/SAML_IDP_profile
    • 如果多个 SAML 策略是 IdP 链的一部分,则仅在第一个 SAML 策略上配置中继状态规则就足够了。

    有关此命令的详细信息,请参阅 https://developer-docs.netscaler.com/en-us/adc-command-reference-int/current-release/authentication/authentication-samlactionhttps://support.citrix.com/article/CTX316577

  2. 配置 SAML 策略。

    示例:

    以下命令定义了一个 SAML 策略,该策略将先前定义的 SAML 操作应用于所有流量。

    add authentication policy SamlSPPol1 -rule true -action SamlSPAct1

  3. 将 SAML 策略绑定到身份验证虚拟服务器。

    示例

    以下命令将 SAML 策略绑定到名为“av_saml”的身份验证虚拟服务器。

    bind authentication vserver av_saml -policy SamlSPPol1

  4. 将身份验证虚拟服务器绑定到相应的流量管理虚拟服务器。

    示例

    以下命令将添加名为“lb1_ssl”的负载平衡虚拟服务器,并将名为“av_saml”的身份验证虚拟服务器关联到负载平衡虚拟服务器。 add lb vserver lb1_ssl SSL 10.217.28.224 443 -persistenceType NONE -cltTimeout 180 -AuthenticationHost auth1.example.com -Authentication ON -authnVsName av_saml

    有关此命令的详细信息,请参阅 https://developer-docs.citrix.com/projects/citrix-adc-command-reference/en/latest/authentication/authentication-samlAction

使用 GUI 将 NetScaler 设备配置为 SAML SP

  1. 导航到 安全 > AAA 策略 > 身份验证 > 基本策略 >SAML

  2. 选择 服务器 选项卡,单击 添加,输入以下参数的值,然后单击 创建

    参数描述:

    • 名称-服务器的名称。

    • 重定向 URL - 用户进行身份验证所依据的 URL。有些 IdP 有特殊的 URL,除非它们在 SAML 设置中才能访问。

    • 单点注销 URL - 指定 URL,以便 NetScaler 能够识别何时将客户端发送回 IdP 以完成注销过程。我们不会在这个简单的部署中使用它。

    • SAML 绑定 - 一种用于在 SP 和 IdP 之间传输 SAML 请求者和响应者消息的机制。当 NetScaler 充当 SP 时,它支持发布、重定向和构件绑定。默认的绑定方法是 POST。

      注意:

      对于构件绑定,SP 和 IdP 上的传输机制必须相同。

    • 注销绑定-指定 SAML 注销消息的传输机制。默认的绑定机制是 Post。

    • IdP 证书名称 - 位于 SAML 签名证书下的 IdPCert 证书 (Base64)。

    • 用户字段 - IdP 的 SAML 身份验证表单的部分,其中包含 SP 在必要时提取的用户名。

    • 签名证书名称-选择 NetScaler 用于签署向 IdP 发出的身份验证请求的 SAML SP 证书(带有私钥)。必须将相同的证书(不带私钥)导入到 IdP,以便 IdP 可以验证身份验证请求签名。大多数 IdP 不需要签名证书名称。

    • 发行者名称 -标识符。在 SP 和 IdP 上指定的唯一 ID,用于帮助相互识别服务提供商。

    • 拒绝未签名的断言 - 如果需要对来自 IdP 的断言进行签名,则可以指定该选项。默认选项为开。
      • 开:拒绝没有签名的断言
      • 严格:确保响应和断言均已签名
      • 关:允许未签名的断言
    • Audience(受众)- IdP 发送的断言适用的受众。这通常是实体名称或代表服务提供商的 URL。

    • 签名算法 - 用于签名/验证 SAML 事务的算法。默认值为 RSA-SHA256。

    • 摘要方法 - 用于计算/验证 SAML 事务摘要的算法。默认值为 SHA256。

    • 中继状态规则 - 有关此参数的详细信息,请参阅有关 relaystateRule 参数的注意事项

    • 状态检查规则-配置经过评估的表达式,以验证 SAML 端点上的 HTTP 请求。

    • 默认身份验证组-除了提取的组外,身份验证成功时选择的默认组。

    • 组名称字段 - 包含用户组的断言中标记的名称。

    • 偏移时间(分钟)- 此选项指定 NetScaler 服务提供商在传入断言时允许的时钟偏差(以分钟为单位)。例如,如果您在 16:00 将偏移时间设置为 10 分钟,则 SAML 断言的有效期为 15:50 到 16:10,总共为 20 分钟。默认偏移时间为 5 分钟。

    • 双重身份验证-启用 SAML 之后的第二因素身份验证。

    • 断言消费者服务索引 - 与此配置对应的元数据条目的索引/ID。

    • 属性使用服务索引 - IdP 属性规范的索引/ID。IdP 使用此索引找到 SP 请求的属性,并在 SAML 断言中发送这些属性。

    • 请求的身份验证上下文 - 指定响应中返回的身份验证语句的上下文要求。

    • 身份验证类类型-指定从 IdP 请求的身份验证类类型。

    • 自定义身份验证类类型-指定要作为 SP 发送给 SAML IdP 的身份验证请求的一部分发送的自定义身份验证类引用。

    • 发送指纹-在 SAML 请求中发送指纹而不是证书。

    • 强制使用用户名-选择在进行第二因素身份验证时是否可以在登录页面上编辑从 SAML 断言中提取的用户名。

    • 强制身份验证-在接收 NetScaler 请求的 IdP 上强制进行身份验证。

    • 存储 SAML 响应-只要用户会话处于活动状态,就存储整个 SAML 响应。
  3. 创建相应的 SAML 策略。

    导航到“安全”>“AAA 应用程序流量”>“策略”>“身份验证”>“高级策略”>“策略”,然后单击“添加”。

    创建身份验证 SAML 策略 页面上,提供以下详细信息:

    • 名称 - 指定 SAML 策略的名称。
    • 操作类型-选择 SAML 作为身份验证操作类型。
    • 操作 - 选择要绑定 SAML 策略的 SAML 服务器配置文件。
    • 表达式 - 显示规则或表达式的名称,SAML 策略使用该规则或表达式来确定用户是否必须通过 SAML 服务器进行身份验证。在文本框中,设置值“rule = true”以使 SAML 策略生效并运行相应的 SAML 操作。
  4. 将 SAML 策略绑定到身份验证虚拟服务器。

    导航到 Security(安全)> AAA - Application Traffic(AAA - 应用程序流量)> Virtual Servers(虚拟服务器),然后将 SAML 策略与身份验证虚拟服务器相关联。

  5. 将身份验证服务器与相应的流量管理虚拟服务器关联。

    导航到 Traffic Management(流量管理)> Load Balancing(负载平衡)(或 Content Switching(内容交换))> Virtual Servers(虚拟服务器)中,选择虚拟服务器,然后将身份验证虚拟服务器与其关联。

有关 relaystateRule 参数的注意事项

samlAction 命令中的 relaysStateRule 参数配置表达式,以便在 SAML 断言后实现顺畅的身份验证重定向。在身份验证重定向之前,该表达式必须包含用户想要连接的单个已发布域或已发布域列表。例如,该表达式必须包含使用 SAML 操作进行身份验证的前端虚拟服务器(VPN、负载平衡或内容交换)的域。

我们建议使用带有尾随的 (/) 的完整域名。例如 https://example.com/

以下示例描述了单域和多域场景的 RelayStateRule 参数配置示例:

对于单个域:

set samlAction <samlActionName> -relaystateRule "AAA.LOGIN.RELAYSTATE.EQ(\"https://example1.com/\")"

对于多个域:

使用模式集添加多个域:

add patset test1

bind patset test1 "https://example1.com/"

bind patset test1 "https://test1.com/"

bind patset test1 "https://10.11.11.112/"

set samlAction <samlActionName> -relaystateRule AAA.LOGIN.RELAYSTATE.CONTAINS_ANY("test1")
<!--NeedCopy-->

要为 FQDN 配置 RegEx 模式匹配,请执行以下操作:

set samlaction <samlActionName> -relaystateRule "AAA.LOGIN.RELAYSTATE.REGEX_MATCH(re#^https://[a-zA-Z0-9]*.example1.com/#)"
<!--NeedCopy-->

在域的开头指定“^”符号 (^https),并在表达式的末尾指定正斜杠“/”(例如:example1\.com/)。

下面是 RelayStateRule 表达式的一些定义:

EQ: Exact match.
CONTAINS: Domain inclusion.
CONTAINS_ANY: Match any domain from a PATSET.
REGEX_MATCH: Regex-based matching.
<!--NeedCopy-->
作为 SAML SP 的 NetScaler