JWTs 使用 Application Load Balancer 进行验证 - ELB
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

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 验证

完成以下任务:

  1. 向 IdP 注册您的服务,IdP 会发布客户端 ID 和客户机密钥。

  2. 单独拨打 IdP 以请求访问服务。IdP 使用访问令牌进行响应。此令牌通常是由 IdP 签署的 JWT。

  3. 设置 JSON 网络密钥集 (JWKS) 端点。负载均衡器在您配置的众所周知的位置获取 IdP 发布的公钥。

  4. 在请求标头中包含 JWT,并在每个请求中将其转发给 Application Load Balancer。

使用控制台配置 JWT 验证

  1. 打开 Amazon EC2 控制台控制台,网址为https://console.aws.amazon.com/ec2/

  2. 在导航窗格上的 Load Balancing(负载均衡)下,选择 Load Balancers(负载均衡器)。

  3. 选择您的 Application Load Balancer,然后选择 Li steners 选项卡。

  4. 选择 HTTPS 监听器,然后选择管理规则

  5. 选择添加规则

  6. (可选)要为规则指定名称,请展开名称和标签,然后输入名称。要添加其他标签,请选择添加其他标签,然后输入标签键和标签值。

  7. 条件下,定义 1-5 个条件值

  8. (可选)要添加转换,请选择添加转换,选择转换类型,然后输入要匹配的正则表达式和替换字符串。

  9. 对于 “操作”、“路由前操作”,选择 “验证令牌”。

    1. 对于 JWKS 端点,请输入您的 JSON Web 密钥集端点的网址。此端点必须可公开访问,并返回用于验证 JWT 签名的公钥。

    2. 对于发行人,在您的 JWT 代币中输入 iss 索赔的预期值。

    3. (可选)要验证其他索赔,请选择其他索赔。

      1. 索赔名称中,输入要验证的索赔名称。

      2. 在 “格式” 中,选择应如何解释索赔值:

        1. 单字符串:声明必须与一个指定值完全匹配。

        2. 字符串数组:声明必须与数组中的一个值匹配。

        3. 空格分隔值:声明包含以空格分隔的值,这些值必须包含指定的值。

      3. 在 “” 中,输入索赔的预期值。

      4. 对于其他索赔(最多 10 项索赔),请重复此操作。

  10. 在 “操作”、“路由操作” 中,选择应在成功验证令牌后执行的主要操作(“转发至”、“重定向到” 或 “返回固定响应”)

  11. 根据需要配置主要操作

  12. 选择保存

使用 CLI 配置 JWT 验证

使用以下 create-rule 命令配置 JWT 验证。

创建带有要验证的操作的侦听器规则 JWTs。监听器必须是 HTTPS 监听器。

aws elbv2 create-rule \ --listener-arn listener-arn \ --priority 10 \ --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 的侦听器规则