Citrix ADC 作为 OAuth IdP
现在可以使用 OpenID-Connect (OIDC) 协议将 Citrix ADC 配置为身份提供者。OIDC 协议增强了 Citrix ADC 的身份提供功能。现在,您可以通过单点登录访问企业级托管应用程序,因为 OIDC 通过不传输用户密码而是使用具有特定生命周期的令牌来提供更高的安全性。OpenID 还设计用于与非浏览器客户端(例如应用程序和服务)集成。因此,许多实施方案广泛采用了 OIDC 协议。
注意
Citrix ADC 必须在 12.1 或更高版本上才能使用 OIDC 协议作为 OAuth IdP 运行。
将 Citrix ADC 作为 OAuth IdP 的优势
- 消除了维护多个身份验证密码的开销,因为用户在整个组织中拥有单个身份。
- 为密码提供了强大的安全性,因为密码仅与身份提供商共享,而不是与您访问的任何应用程序共享。
- 提供了与各种系统的巨大互操作性,使托管应用程序更容易接受 OpenID。
注意
要使解决方案正常运行,需要 Citrix ADC Advanced Edition 及更高版本。
使用 GUI 将 Citrix ADC 配置为 OAuth IdP
-
导航到 Configuration(配置)> Security(安全)> AAA - Application Traffic(AAA - 应用程序流量)> Policies(策略)> Authentication(身份验证)> Advanced Policies(高级策略)> OAuth IdP。
-
单击 Profile(配置文件),然后单击 Add(添加)。
在 Create Authentication OAuth IDP Profile(创建身份验证 OAuth IDP 配置文件)页面上,设置以下参数的值,然后单击 Create(创建)。
-
Name(名称)- 身份验证配置文件的名称。必须以字母、数字或下划线字符 (_) 开头,并且必须只包含字母、数字和连字符 (-)、句点 (.) 井号 (#)、空格 ( )、at (@)、等号 (=)、冒号 (:) 和下划线字符。创建配置文件后无法更改。
- Client ID(客户端 ID)- 标识 SP 的唯一字符串。授权服务器使用此 ID 推断客户端配置。最大长度:127。
- 客户端密钥 - 由用户和授权服务器建立的密钥字符串。最大长度:239。
- Redirect URL(重定向 URL)- 必须向其发布代码/令牌的 SP 上的端点。
- 颁发者名称 — 要接受其令牌的服务器的标识。最大长度:127。
- Audience(受众)- IdP 发送的令牌的目标收件人。这可能会由收件人进行检查。
- 倾斜时间 — 此选项指定 Citrix ADC 允许在传入令牌上允许的时钟偏差(以分钟为单位)。例如,如果 skewTime 为 10,那么令牌的有效期为(当前时间 - 10)分钟至(当前时间 + 10)分钟,也就是 20 分钟。默认值:5。
- 默认身份验证组 — IdP 选择此配置文件时添加到会话内部组列表中的组,可在 nFactor 流程中使用。它可以在表达式 (AAA.USER.IS_MEMBER_OF (“xxx”)) 中用于身份验证策略 识别与信赖方相关的 nFactor 流。最大长度:63
A group added to the session for this profile to simplify policy evaluation and help in customizing policies. This is the default group that is chosen when the authentication succeeds in addition to the extracted groups. Maximum Length: 63.
-
-
单击 Policies(策略),然后单击 Add(添加)。
-
在 Create Authentication OAuth IDP Policy(创建身份验证 OAuth IDP 策略)页面上,设置以下参数的值,然后单击 Create(创建)。
- Name(名称)- 身份验证策略的名称。
- Action(操作)- 之前创建的配置文件的名称。
- Log Action(日志操作)- 请求与此策略匹配时要使用的消息日志操作的名称。非强制性提交。
- Undefined-Result Action(未定义的结果操作)- 策略评估结果未定义 (UNDEF) 时应执行的操作。非必填字段。
- Expression(表达式)- 策略用于响应特定请求的默认语法表达式。例如,true。
- Comments(评论)- 对策略的任何评论。
将 OAuthIDP 策略和 LDAP 策略绑定到身份验证虚拟服务器
-
导航到 Configuration(配置)> Security(安全)> AAA - Application Traffic(AAA - 应用程序流量)> Advanced Policies (高级策略)> Actions(操作)> LDAP。
-
在 LDAP Action(LDAP 操作)屏幕上,单击 Add(添加)。
-
在 创建身份验证 LDAP 服务器 屏幕上,设置以下参数的值,然后单击 创建。
- Name(名称)- LDAP 服务器操作的名称
- ServerName/ServerIP(服务器名称/服务器 IP)- 提供 LDAP 服务器的 FQDN 或 IP
- 为 Security Type, Port, Server Type, Time-Out(安全类型、端口、服务器类型、超时)选择适当的值
- 确保已选中 Authentication(身份验证)
- Base DN(基础 DN)- 开始 LDAP 搜索的基础。例如,dc=aaa,dc=local。
-
Administrator Bind DN(管理员绑定 DN):绑定到 LDAP 服务器的用户名。例如,
admin@aaa.local
。 - Administrator Password/Confirm Password(管理员密码/确认密码):用于绑定 LDAP 的密码
- 单击 Test Connection(测试连接)测试您的设置。
- Server Logon Name Attribute(服务器登录名属性):选择 sAMAccountName
- 其他字段不是必填字段,因此可以根据需要进行配置。
-
导航到 Configuration(配置)> Security(安全)> AAA - Application Traffic(AAA - 应用程序流量)> Policies(策略)> Authentication(身份验证)> Advanced Policies (高级策略)> Policy(策略)。
-
在 身份验证策略 屏幕上,单击 添加。
-
在 创建身份验证策略 页面上,为以下参数设置值,然后单击 创建。
- Name(名称)- LDAP 身份验证策略的名称。
- 操作类型 — 选择 LDAP。
- Action(操作)- 选择 LDAP 操作。
- 表达式 — 策略用于响应特定请求的默认语法表达式。例如,true**。
OAuth 功能现在支持令牌 API 中来自信赖方 (RP) 端以及 Citrix Gateway 和 Citrix ADC 的 IdP 端的以下功能。
-
PKCE(代码交换的证明密钥)支持
-
支持 client_assertion
使用 CLI 使用 OIDC 协议将 Citrix ADC 配置为 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)
。自 Citrix ADC 13.0—85.19 版本起,OAuth IdP 内省端点支持属性
active: true
如果将身份验证虚拟服务器配置为 OAuth IdP,则必须将众所周知的 OAuth IdP 发现端点 URL 配置为
https://<netscaler-oauth-idp-fqdn>/oauth/idp/.well-known/openid-configuration
。配置为 OAuth IdP 的 Citrix ADC 在发送给 OAuth SP 的
.well-known-Endpoint
响应中不显示client_secret_post
、client_secret_jwt
、private_key_jwt
和client_secret_basic
令牌端点身份验证方法。
OIDC 协议上的加密令牌支持
采用 OIDC 机制的 Citrix ADC 现在支持发送加密令牌和签名令牌。Citrix ADC 使用 JSON 网络加密规范来计算加密令牌,并且仅支持加密令牌的紧凑序列化。要加密 OpenID 令牌,Citrix ADC 需要依赖方 (RP) 的公钥。公钥是通过轮询依赖方的众所周知的配置终端节点来动态获取的。
在“authentication OAuthIDPProfile.”配置文件中引入了一个新的“relyingPartyMetadataURL”选项。
使用 CLI 配置信赖方的终端节点
在命令提示符下,键入:
```set authentication OAuthIDPProfile
- **relyingPartyMetadataURL** - Citrix ADC IdP 可以通过该端点获取有关正在配置的信赖方的详细信息。元数据响应必须包括 RP 公钥的 jwks_uri 的终端节点。
- **refreshInterval** - 定义必须轮询此终端节点才能在几分钟内更新证书的速率。
- **status** -反映轮询操作的状态。一旦 Citrix ADC 成功获得公钥,状态即已完成。
**示例**
```
set authentication OAuthIDPProfile sample_profile -relyingPartyMetadataURL https://rp.customer.com/metadata -refreshInterval 50 -status < >
<!--NeedCopy-->
配置端点后,Citrix ADC 首先轮询依赖方的已知端点以读取配置。当前,Citrix ADC 仅处理“jwks_uri”端点。
- 如果响应中没有“jwks_uri”,则配置文件的状态不完整。
- 如果响应中存在“jwks_uri”,Citrix ADC 也会轮询该终端节点以读取信赖方的公钥。
注意: 令牌加密仅支持 RSAES-OAEP 和 AES GCM 加密类型算法。
OpenID Connect 上的自定义属性支持
OpenID 依赖方可能需要在令牌中包含多个用户名或用户主体名称 (UPN) 来创建用户配置文件或做出授权决定。最常见的是,用户组需要为用户应用授权策略。有时,配置用户帐户需要更多详细信息,例如名字或姓氏。
配置为 IdP 的 Citrix ADC 可用于使用表达式在 OIDCid_token 中发送额外属性。高级策略表达式用于根据要求发送自定义属性。Citrix IdP 会评估与属性对应的表达式,然后计算最终令牌。
Citrix ADC 自动在输出数据中应用 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_token 中插入的属性的名称。
注意:
在以下示例中,
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 表达式。
支持 Citrix Gateway 上的主动-主动 GSLB 部署
使用 OIDC 协议配置为身份提供程序 (IdP) 的 Citrix Gateway 可以支持主动-主动 GSLB 部署。Citrix Gateway IdP 上的主动-主动 GSLB 部署提供了跨多个地理位置对传入用户登录请求进行负载平衡的功能。
重要
Citrix 建议您将 CA 证书绑定到 SSL 服务并在 SSL 服务上启用证书验证以增强安全性。
有关配置 GSLB 设置的更多信息,请参阅 GSLB 设置和配置示例。