通过Citrix ADC设备进行API身份验证
现代应用程序与客户交互的方式发生了范式转变。传统上,浏览器客户端用于访问服务。应用程序通常会设置会话 cookie 来跟踪用户上下文。现代化的分布式应用程序使得跨微服务维护用户会话变得困难。因此,大多数应用程序访问都基于 API。 与这些分布式服务进行通信的客户端也不断发展。大多数客户端从称为授权服务器的受信任实体获取令牌,以证明用户身份和访问权限。然后,这些客户端将令牌与每个访问请求一起呈现给应用程序。因此,需要改进像 Citrix ADC 这样的传统代理设备以支持这些客户端。Citrix ADC 设备为管理员提供了一种处理此类流量的方法。Citrix ADC 可以部署为 API 网关,以便前端发送到已发布服务的所有流量。API 网关可以部署在传统(混合多云或 HMC)或云原生环境中。API Gateway 终止所有入站流量,以提供多种服务,如身份验证、授权、速率限制、路由、缓存、SSL 卸载、应用程序防火墙等。因此,它成为基础架构中的一个关键组成部分。
令牌类型
API访问期间交换的令牌大多符合OAuth/OpenID连接(OIDC)协议。仅用于“委派访问”的访问令牌符合OAuth协议,而符合OIDC的身份令牌也包含用户信息。访问令牌通常是不透明或随机的数据Blob。但是,它们有时可能是符合JWT(Json Web令牌)标准的单独令牌。Id令牌始终是签名的jwt。
使用OAuth访问API
Citrix ADC设备上的OAuth身份验证类型可用于处理OAuth和OIDC协议。OIDC是OAuth协议的扩展。
Citrix ADC设备上的OAuthAction可用于处理交互式客户端,如浏览器和本机客户端(如客户端应用程序)。交互式客户端将重定向到身份提供程序使用oidc协议登录。本机客户端可以获取带外令牌,并可以在Citrix ADC设备上显示这些令牌以供访问。
注意:
从终端节点获得的访问令牌可以缓存以供后续请求使用,从而提高API性能。
要使用命令行界面配置令牌缓存支持,请在命令提示符处键入以下命令:
set aaparameter -apITokenCache
以下各节介绍了本地客户端执行的API访问方法。
用于API访问的虚拟服务器
要部署Citrix ADC设备以进行API访问,通过401年身份验证部署流量管理(TM)虚拟服务器。它与身份验证(身份验证、授权和审核)虚拟服务器相关联,以保存身份验证和会话策略。以下配置代码段创建一个此类虚拟服务器。
Add lb vserver lb-api-access SSL 443 -authn401 On -AuthnVsName auth-api-access Bind SSL vserver lb-api-access -certkeyName < SSL -cert-entity> Add authentication vserver auth-api-access SSL
注意:
您需要将服务绑定到TM虚拟服务器,并将身份验证策略(如下所述的OAuthAction)绑定到身份验证虚拟服务器才能完成配置。
创建虚拟服务器后,需要添加OAuthAction以及相应的策略。OAuth操作中还有其他几个选项,具体取决于令牌类型和其他安全机制。
ID令牌的OAuth配置
Id令牌始终是签名的jwt。也就是说,它们携带标题、有效载荷和签名称。由于这些都是独立的令牌,Citrix ADC设备可以在本地验证这些令牌。要验证这些令牌,设备需要知道用于对这些令牌进行签名的相应私钥的公钥。
以下是一个带有某些强制参数和" CertendPoint "的OAuthAction示例。
添加认证OAuthAction oauth-api-access - clientd -clientsecret -authorizationEndpoint <用户登录时被重定向到的URL > -tokenEndpoint <可以获得令牌的端点> -certEndpoint < IdP公钥发布的uri >
其中,
客户机ID(客户端id)-标识sp的唯一字符串。授权服务器使用此id推断客户端配置。最大长度:127。
客户端密码-由用户和授权服务器建立的密码字符串。最大长度:239。
authorizationEndpoint—用户通常登录的url(使用交互式客户端时)。
tokenEndpoint-在授权服务器上提供/交换令牌/代码的url
certEndpoint-授权服务器发布用于签名令牌的公钥的url。授权服务器可以发布多个密钥,并选择其中一个签名令牌。
注意:客户端id /客户端秘密/授权端点/令牌端点是API访问的可选参数。但是,为这些参数提供值是一种很好的做法,因为操作实体可以用于不同的目的。
在前面的配置中,“CertendPoint”对于ID令牌验证至关重要。此端点包含用于对令牌进行签名的证书的公钥。这些公钥必须符合JWK(Json Web密钥)规范。
在Citrix ADC设备上配置CertendPoint后,它将定期轮询端点(默认间隔为1天,可在配置中自定义),以使公钥保持最新状态。公钥可用后,adc可以对传入的id令牌执行本地验证。
不透明访问令牌的OAuth配置
不透明令牌无法在Citrix ADC设备上进行本地验证。这些需要在授权服务器上进行验证。Citrix ADC设备使用 OAuth 规范中提到的“内省协议”来验证这些令牌。OAuth 配置中提供了一个新选项,即 Introspecturl,用于验证不透明令牌。
set oauthAction oauth-api- access - introspectorl < Authorization Server的uri for introspection>
内省API的格式符合https://tools.ietf.org/html/rfc7662#section-2.1
以下规范:
POST /introspect HTTP/1.1 Host: server.example.com Accept: application/json Content-Type: application/x-www-form-urlencoded授权:Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW token= mf_9 . b5f -4.1 jqm . token_type_hint=access_token
将策略绑定到身份验证vserver
创建OAuthAction后,需要创建相应的策略来调用它。
添加认证策略oauth-api-access -rule <> -action
绑定认证vserver auth-api-access -policy oauth-api-access -pri 100
## Citrix ADC设备上的其他安全设置令牌验证包括令牌生命周期检查。超出可接受时间的令牌将被拒绝。以下是额外安全性的附加设置。其中一些建议始终进行配置。受**众**:可以使用令牌的预期收件人配置OAuth操作。所有令牌都与此配置的url匹配。Citrix ADC设备具有一个附加功能,其中受众字段实际上指向设备上的模式集。使用此模式集,管理员可以为受众配置多个 URL。
添加策略patset oauth_audience
绑定patset oauth_audience https://app1.company.com
绑定patset oauth_audience https://app2.company.com
bind patset oauth_audience httpsL//app1.company.com/path1
set oAuthAccess oauth-api-access -audience oauth_audience
在上面的示例中,在模式集中指定了多个受众。因此,只有当传入令牌包含模式集中的任何已配置url时,才允许传入令牌。**发行**者:要接受其令牌的服务器的标识。最大长度:127。在OAuth操作中配置令牌的发行者是一种很好的做法。这可确保不允许由错误的授权服务器颁发的令牌。* * SkewTime * *:指定Citrix ADC设备在传入令牌上允许的时钟偏斜(以分钟为单位)。例如,如果SkewTime为10,则令牌的有效期为(当前时间-10)分钟到(当前时间+ 10分钟,即总共20分钟。默认值:5 **AllowedAlgorithms**:此选项允许管理员限制传入令牌中的某些算法。默认情况下,允许使用所有支持的方法。但是,这些可以使用此选项控制。以下配置确保仅允许使用rs256和rs512的令牌:
set oAuthAction oauth-api-access -allowedAlgorithms RS256 RS512
在上述配置之后,只允许使用rs256和rs512的令牌。##绕过身份验证中的某些流量在许多情况下,有一些发现API可供客户端公开访问。这些API通常会显示服务本身的配置和功能。管理员可以使用“无身份验证”策略将Citrix ADC设备配置为绕过这些元数据URL的身份验证,如下所述:< !——NeedCopy >
add认证策略auth-bypass-policy -rule <> -action NO_AUTHN . add
绑定认证vserver auth-api-access -policy auth-bypass-policy -pri 110
No_authn是一种隐式操作,可在规则匹配时完成身份验证。除了API访问的范围之外,no_uthn操作还有其他用途。<!——NeedCopy >