本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
JWTs 使用 Application Load Balancer 进行验证
您可以配置 Application Load Balancer (ALB) 来验证客户端为安全 service-to-service (S2S) 或 (M2M) 通信提供的 JSON Web 令牌 machine-to-machine (JWT)。无论JWT是如何发布的,负载均衡器都可以在无需人为干预的情况下对其进行验证。
ALB 将验证令牌签名,并需要两个强制声明:“iss”(发行者)和 “exp”(到期)。此外,如果代币中存在,ALB 还将验证 “nbf”(不是之前)和 “iat”(当时发行)的索赔。您最多可以配置 10 个额外的索赔进行验证。这些索赔支持三种格式:
-
单字符串:单个文本值
-
以空格分隔的值:用空格分隔的多个值(最多 10 个值)
-
字符串数组:文本值数组(最多 10 个值)
如果令牌有效,则负载均衡器会将带有令牌的请求按原样转发到目标。否则,服务将拒绝该请求。
准备使用 JWT 验证
完成以下任务:
-
向 IdP 注册您的服务,IdP 会发布客户端 ID 和客户机密钥。
-
单独拨打 IdP 以请求访问服务。IdP 使用访问令牌进行响应。此令牌通常是由 IdP 签署的 JWT。
-
设置 JSON 网络密钥集 (JWKS) 端点。负载均衡器在您配置的众所周知的位置获取 IdP 发布的公钥。
-
在请求标头中包含 JWT,并在每个请求中将其转发给 Application Load Balancer。
使用控制台配置 JWT 验证
-
打开 Amazon EC2 控制台控制台,网址为https://console.aws.amazon.com/ec2/
。 -
在导航窗格上的 Load Balancing(负载均衡)下,选择 Load Balancers(负载均衡器)。
-
选择您的 Application Load Balancer,然后选择 Li steners 选项卡。
-
选择 HTTPS 监听器,然后选择管理规则。
-
选择添加规则。
-
(可选)要为规则指定名称,请展开名称和标签,然后输入名称。要添加其他标签,请选择添加其他标签,然后输入标签键和标签值。
-
在条件下,定义 1-5 个条件值
-
(可选)要添加转换,请选择添加转换,选择转换类型,然后输入要匹配的正则表达式和替换字符串。
-
对于 “操作”、“路由前操作”,选择 “验证令牌”。
-
对于 JWKS 端点,请输入您的 JSON Web 密钥集端点的网址。此端点必须可公开访问,并返回用于验证 JWT 签名的公钥。
-
对于发行人,在您的 JWT 代币中输入 iss 索赔的预期值。
-
(可选)要验证其他索赔,请选择其他索赔。
在索赔名称中,输入要验证的索赔名称。
在 “格式” 中,选择应如何解释索赔值:
-
单字符串:声明必须与一个指定值完全匹配。
-
字符串数组:声明必须与数组中的一个值匹配。
-
空格分隔值:声明包含以空格分隔的值,这些值必须包含指定的值。
-
-
在 “值” 中,输入索赔的预期值。
-
对于其他索赔(最多 10 项索赔),请重复此操作。
-
-
在 “操作”、“路由操作” 中,选择应在成功验证令牌后执行的主要操作(“转发至”、“重定向到” 或 “返回固定响应”)。
-
根据需要配置主要操作
-
选择保存。
使用 CLI 配置 JWT 验证
使用以下 create-rule 命令配置 JWT 验证。
创建带有要验证的操作的侦听器规则 JWTs。监听器必须是 HTTPS 监听器。
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 的侦听器规则。