本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用应用程序负载均衡器验证 JWT
您可以配置应用程序负载均衡器 (ALB) 来验证客户端为安全服务对服务 (S2S) 或机器对机器 (M2M) 通信提供的 JSON 网络令牌 (JWT)。不管 JWT 是如何发布的,负载均衡器都可以对其进行验证,无需人为干预。
ALB 将验证代币签名并要求两项强制性声明:“iss”(发行者)和 “exp”(到期)。此外,如果代币中存在,ALB还将验证 “nbf”(不是之前)和 “iat”(当时发出)索赔。您最多可以配置 10 个额外的索赔进行验证。这些索赔支持三种格式:
-
Single-string: 单个文本值
-
Space-separated 值:由空格分隔的多个值(最多 10 个值)
-
String-array: 文本值数组(最多 10 个值)
如果令牌有效,则负载均衡器将带有令牌的请求按原样转发给目标。否则,服务将拒绝该请求。
准备使用 JWT 验证
完成以下任务:
-
向 IdP 注册您的服务,IdP 会颁发客户端 ID 和客户端密钥。
-
单独调用 IdP 以请求访问服务。IdP 使用访问令牌进行响应。该令牌通常是由 IdP 签名的 JWT。
-
设置 JSON Web 密钥集 (JWKS) 端点。负载均衡器在您配置的已知位置获取 IdP 发布的公钥。
-
将 JWT 包含在请求标头中,并在每个请求中将其转发到应用程序负载均衡器。注意:仅支持 RS256 算法
JWT 验证限制
在应用程序负载均衡器中使用 JWT 验证时,JWKS(JSON Web 密钥集)端点必须满足以下要求:
-
最大响应大小:150 KB
-
最大密钥数:10 个密钥
如果您的身份提供商的 JWKS 响应超出其中一个限制,则应用程序负载均衡器不会将请求转发到您的后端目标。
如果您的身份提供商的 JWKS 端点超过这些限制,请考虑在应用程序代码中实现 JWT 验证,或使用密钥集较小的身份提供商。
使用控制台配置 JWT 验证
-
在以下位置打开亚马逊 EC2 控制台控制台https://console.aws.amazon.com/ec2/
。 -
在导航窗格上的 Load Balancing(负载均衡)下,选择 Load Balancers(负载均衡器)。
-
选择您的应用程序负载均衡器,然后选择监听器选项卡。
-
选择 HTTPS 侦听器,然后选择管理规则。
-
选择添加规则。
-
(可选)要为规则指定名称,请展开名称和标签,然后输入名称。要添加其他标签,请选择添加其他标签,然后输入标签键和标签值。
-
在 “条件” 下,定义 1-5 个条件值
-
(可选)要添加转换,请选择添加转换,选择转换类型,然后输入要匹配的正则表达式和替换字符串。
-
在 “操作、 Pre-routing操作” 中,选择 “验证令牌”。
-
对于 JWKS 终端节点,输入您的 JSON Web 密钥集终端节点的 URL。此端点必须可公开访问,并返回用于验证 JWT 签名的公钥。
-
对于发行者,在您的 JWT 代币中输入 iss 索赔的预期价值。
-
(可选)要验证其他索赔,请选择其他索赔。
在 “索赔名称” 中,输入要验证的索赔名称。
对于格式,选择索赔值的解释方式:
-
单一字符串:声明必须完全匹配一个指定值。
-
字符串数组:声明必须与数组中的一个值相匹配。
-
空格分隔的值:该声明包含以空格分隔的值,这些值必须包含指定的值。
-
-
在 “值” 中,输入索赔的预期值。
-
对于其他索赔,请重复此操作(最多 10 项索赔)。
-
-
对于操作、路由操作,选择在成功验证令牌后应执行的主要操作(转发至、重定向到或返回固定响应)。
-
根据需要配置主要操作
-
选择保存。
使用 CLI 配置 JWT 验证
使用以下 create-rule 命令配置 JWT 验证。
使用验证 JWT 的操作创建监听器规则。监听器必须是 HTTPS 监听器。
注意
配置 JWT 验证时,请确保您的 JWKS 终端节点响应的大小不超过 150 KB 或包含超过 10 个密钥。超过这些限制的响应将阻止将请求转发到您的目标。
aws elbv2 create-rule \ --listener-arnlistener-arn\ --priority10\ --conditions Field=path-pattern,Values="/login" \ --actions file://actions.json
以下是指定jwt-validation动作和操作的actions.json文件示例。forward请按照您的身份提供商提供的文档确定支持的字段
--actions '[ { "Type":"jwt-validation", "JwtValidationConfig":{ "JwksEndpoint":"https://issuer.example.com/.well-known/jwks.json", "Issuer":"https://issuer.com" }, "Order":1 }, { "Type":"forward", "TargetGroupArn":"target-group-arn", "Order":2 } ]'
以下示例指定了要验证的额外索赔。
--actions '[ { "Type":"jwt-validation", "JwtValidationConfig":{ "JwksEndpoint":"https://issuer.example.com/.well-known/jwks.json", "Issuer":"https://issuer.com", "AdditionalClaims":[ { "Format":"string-array", "Name":"claim_name", "Values":["value1","value2"] } ], }, "Order":1 }, { "Type":"forward", "TargetGroupArn":"target-group-arn", "Order":2 } ]'
有关更多信息,请参阅 Application Load Balancer 的侦听器规则。