Citrix ADC

Citrix ADC 作为 OAuth IdP

现在,Citrix ADC 设备可以使用 OpenID-Connect (OIDC) 协议将其配置为身份提供商。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

  1. 导航到 Configuration(配置)> Security(安全)> AAA - Application Traffic(AAA - 应用程序流量)> Policies(策略)> Authentication(身份验证)> Advanced Policies(高级策略)> OAuth IdP

  2. 单击 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”)) 中用于身份验证策略以 确定信赖方相关的 nactor 流程。最大长度: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 authenticatiob succeeds in addition to the extracted groups. Maximum Length: 63.

  3. 单击 Policies(策略),然后单击 Add(添加)。

  4. Create Authentication OAuth IDP Policy(创建身份验证 OAuth IDP 策略)页面上,设置以下参数的值,然后单击 Create(创建)。

    • 名称 — 身份验证策略的名称。
    • 操作 — 上面创建的配置文件的名称。
    • 日志操作 — 请求与此策略匹配时使用的消息日志操作的名称。非强制性提交。
    • Undefined-Result Action(未定义的结果操作)- 策略评估结果未定义 (UNDEF) 时应执行的操作。非必填字段。
    • Expression(表达式)- 策略用于响应特定请求的默认语法表达式。例如,true。
    • Comments(评论)- 对策略的任何评论。

将 OAuthIDP 策略和 LDAP 策略绑定到身份验证虚拟服务器

  1. 导航到 Configuration(配置)> Security(安全)> AAA - Application Traffic(AAA - 应用程序流量)> Advanced Policies (高级策略)> Actions(操作)> LDAP

  2. LDAP Action(LDAP 操作)屏幕上,单击 Add(添加)。

  3. 创建身份验证 LDAP 服务器 屏幕上,设置以下参数的值,然后单击 创建

    • 名称 — LDAP 操作的名称
    • ServerName/ServerIP(服务器名称/服务器 IP)- 提供 LDAP 服务器的 FQDN 或 IP
    • Security Type, Port, Server Type, Time-Out(安全类型、端口、服务器类型、超时)选择适当的值
    • 确保已选中 Authentication(身份验证)
    • Base DN(基础 DN)- 开始 LDAP 搜索的基础。例如,dc=aaa,dc=local。
    • 管理员绑定 DN: 绑定到 LDAP 服务器的用户名。例如,admin@aaa.local。
    • Administrator Password/Confirm Password(管理员密码/确认密码):用于绑定 LDAP 的密码
    • 单击 Test Connection(测试连接)测试您的设置。
    • Server Logon Name Attribute(服务器登录名属性):选择 sAMAccountName
    • 其他字段不是必填字段,因此可以根据需要进行配置。
  4. 导航到 Configuration(配置)> Security(安全)> AAA - Application Traffic(AAA - 应用程序流量)> Policies(策略)> Authentication(身份验证)> Advanced Policies (高级策略)> Policy(策略)。

  5. 身份验证策略 屏幕上,单击 添加

  6. 创建身份验证策略 页面上,为以下参数设置值,然后单击 创建。

    • Name(名称)- LDAP 身份验证策略的名称。
    • Action Type(操作类型)- 选择 LDAP。
    • Action(操作)- 选择 LDAP 操作。
    • 表达式 — 策略用于响应特定请求的默认语法表达式。例如,true**。

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

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

  • 支持 client_assertion

使用带有命令行的 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)

OIDC 协议上的加密令牌支持

具有 OIDC 机制的 Citrix ADC 设备现在支持发送加密令牌和签名令牌。Citrix ADC 设备使用 JSON Web 加密规范来计算加密令牌,并仅支持加密令牌的紧凑序列化。要加密 OpenID 令牌,Citrix ADC 设备需要信赖方 (RP) 的公钥。公钥是通过轮询依赖方的众所周知的配置终端节点来动态获取的。

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

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

在命令提示符下,键入:

```set authentication OAuthIDPProfile [-relyingPartyMetadataURL ] [-refreshInterval ] [-status < >]


-  **relyingPartyMetadataURL** -C itrix 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 中插入的属性的名称。

注意: 您最多可以配置 2,000 字节的属性。

例如: 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 设置和配置示例

Citrix ADC 作为 OAuth IdP