作为 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
-
配置 SAML SP 操作。
示例
以下命令添加了一项 SAML 操作,用于重定向未经身份验证的用户请求。
add authentication samlAction SamlSPAct1 -metadataUrl "https://ksidp1.ksaaa.local/metadata/samlidp/SAML_IDP_profile" -samlIdPCertName nssp -preferredbindtype SSOREDIRECT -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-samlaction 和 https://support.citrix.com/article/CTX316577。
- 为 samlAction 命令中的
-
配置 SAML 策略。
示例:
以下命令定义了一个 SAML 策略,该策略将先前定义的 SAML 操作应用于所有流量。
add authentication policy SamlSPPol1 -rule true -action SamlSPAct1
-
将 SAML 策略绑定到身份验证虚拟服务器。
示例
以下命令将 SAML 策略绑定到名为“av_saml”的身份验证虚拟服务器。
bind authentication vserver av_saml -policy SamlSPPol1
-
将身份验证虚拟服务器绑定到相应的流量管理虚拟服务器。
示例
以下命令将添加名为“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
-
配置 SAML SP 操作。
-
导航到安全 > AAA-策略 > 身份验证 > 基本策略 > SAML。
-
选择 服务器 选项卡,单击 添加,输入以下参数的值,然后单击 创建。
参数描述:
-
名称-服务器的名称。
-
重定向 URL - 用户进行身份验证所依据的 URL。有些 IdP 有特殊的 URL,除非它们在 SAML 设置中才能访问。
-
单一注销 URL - 指定 URL 以便 NetScaler 可以识别何时将客户端发送回 IdP 以完成注销过程。
-
SAML 绑定 - 一种用于在 SP 和 IdP 之间传输 SAML 请求者和响应者消息的机制。当 NetScaler 充当 SP 时,它支持发布、重定向和构件绑定。默认的绑定方法是 POST。
注意:
对于构件绑定,SP 和 IdP 上的传输机制必须相同。
-
注销绑定-指定 SAML 注销消息的传输机制。默认的绑定机制是 Post。
-
IdP 证书名称 - 位于 SAML 签名证书下的 IdPCert 证书 (Base64)。
-
SAML IDP 元数据 URL - 用于获取 SAML 元数据。当元数据 URL 存在时,您无需指定 IdP 证书名称和重定向 URL 字段。
当您配置元数据 URL 时,SAML IdP 会将 SSO 和 Logout 的绑定类型选项发送给 NetScaler。默认情况下,NetScaler 选择“重定向”作为“注销”的绑定类型,选择“发布”作为 SSO 的绑定类型。
以下是包含绑定类型选项的 SAML IdP 响应示例:
<?xml version=\"1.0\"?> <md:EntityDescriptor xmlns:md=\"urn:oasis:names:tc:SAML:2.0:metadata\" ID=\"_b4743282f0a1e14164b8ccd429e8cee2\" entityID=\"192.0.2.255\"> <md:SingleLogoutService Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP -Redirect\" Location=\"https://192.0.2.255 /cgi/tmlogout_redirect1\"></md:SingleLogoutService> <md:SingleLogoutService Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST\" Location=\"https://192.0.2.255 /cgi/tmlogout_post1\"></md:SingleLogoutService> <md:SingleSignOnServ ice Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST\" Location=\"https://192.0.2.255 /saml/login_post1\"> </md:SingleSignOnService> <md:SingleSignOnService Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\" Location=\"https://192.0.2.255 /saml/login_redirect1\"> </md:SingleSignOnService> </md:EntityDescriptor>
您可以通过配置首选绑定类型参数来修改 SSO 和 Logout 的默认绑定类型。
-
首选绑定类型-指定 SSO 和注销的首选绑定类型。此选项从 14.1 Build 25.x 起可用。
在之前的 SAML IdP 响应中,对于 SSO,NetScaler 选择 Post 作为 SAML 绑定,并默认选择
https://192.0.2.255/saml/login_post1
。您可以通过选中SSOREDIRECT
复选框作为首选绑定类型来修改此行为。在之前的 SAML IdP 响应中,对于注销,NetScaler 选择“重定向”作为注销绑定类型,并默认选择
https://192.0.2.255/cgi/tmlogout_redirect1
。您可以通过选中LOGOUTPOST
复选框作为首选绑定类型来修改此行为。您可以根据自己的喜好配置一种或两种绑定类型。
-
元数据刷新间隔(分钟)-从指定元数据 URL 提取元数据的时间间隔(以分钟为单位)。
-
用户字段 - IdP 的 SAML 身份验证表单的部分,其中包含 SP 在必要时提取的用户名。
-
签名证书名称-选择 NetScaler 用于签署向 IdP 发出的身份验证请求的 SAML SP 证书(带有私钥)。必须将相同的证书(不带私钥)导入到 IdP,以便 IdP 可以验证身份验证请求签名。大多数 IdP 不需要签名证书名称。
-
IssuerName - 标识符。在 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 响应。
-
-
-
创建相应的 SAML 策略。
导航到“安全”>“AAA 应用程序流量”>“策略”>“身份验证”>“高级策略”>“策略”,然后单击“添加”。
在 创建身份验证 SAML 策略 页面上,提供以下详细信息:
- 名称 - 指定 SAML 策略的名称。
- 操作类型 - 选择 SAML 作为身份验证操作类型。
- 操作 - 选择要绑定 SAML 策略的 SAML 服务器配置文件。
- 表达式 - 显示规则或表达式的名称,SAML 策略使用该规则或表达式来确定用户是否必须通过 SAML 服务器进行身份验证。在文本框中,设置值“rule = true”以使 SAML 策略生效并运行相应的 SAML 操作。
-
将 SAML 策略绑定到身份验证虚拟服务器。
导航到 Security(安全)> AAA - Application Traffic(AAA - 应用程序流量)> Virtual Servers(虚拟服务器),然后将 SAML 策略与身份验证虚拟服务器相关联。
-
将身份验证服务器与相应的流量管理虚拟服务器关联。
导航到 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-->