如何在调用启用身份验证的 aws 应用程序负载均衡器时传递 cookie

Vin*_*n.S 5 cookies amazon-elb aws-application-load-balancer

我已经完成了以下配置

  1. 创建负载均衡器
  2. 创建用户池
  3. 使用秘密创建客户端并启用授权代码授予和 openid 范围

使用上面创建的资源详细信息在负载均衡器中配置身份验证

  1. 使用认知身份验证创建侦听器规则
  2. 添加了所需的配置,包括范围为openid
  3. deny针对未经身份验证的请求进行配置

问题是,当我使用从配置到应用程序的另一个应用程序客户端检索到的 id 令牌或访问令牌(作为 cookie)调用负载均衡器 url 时,负载均衡器返回 401

当我尝试未经身份验证的请求的配置时authenticate。我能够成功调用负载均衡器网址,并在其中获得成功响应(负载均衡器将重定向到认知登录,成功登录后,负载均衡器将设置 cookie)。

成功场景中设置的cookie正在被分片

cookie 条目就像cookie_name-0cookie_name-1(我不知道如何手动复制/重新创建)

以下来自 aws 文档的摘录证实了上述分片行为

负载均衡器创建身份验证会话 cookie 并将其发送到客户端,以便客户端的用户代理在发出请求时可以将 cookie 发送到负载均衡器。由于大多数浏览器将 Cookie 的大小限制为 4K,因此负载均衡器会将大小大于 4K 的 Cookie 切分成多个 Cookie。如果从 IdP 接收的用户声明和访问令牌的总大小大于 11K 字节,负载均衡器将向客户端返回 HTTP 500 错误,并增加 ELBAuthUserClaimsSizeExceeded 指标。

  1. 如何使用未经身份验证的请求的配置成功调用负载均衡器 url,因为deny我需要手动设置 cookie?
  2. 手动生成的 ID 令牌/访问令牌长度约为 1k,为什么负载均衡器检索到的令牌大小超过 4k?

参考 - https://docs.aws.amazon.com/elasticloadbalancing/latest/application/listener-authenticate-users.html#authentication-flow

https://aws.amazon.com/premiumsupport/knowledge-center/elb-configure-authentication-alb/

Leo*_*opd 11

我认为您想要做的是:您从 Cognito 获取 JWT 令牌,并且您希望使用它们通过使用 Cognito 身份验证检查的 ALB 对 Web 请求进行身份验证。也就是说,您正在尝试找到某种方法来AWSELBAuthSessionCookie自己生成 cookie,或者编写一个调用/oauth2/idpresponse以便 ALB 设置这些 cookie。

简短回答:从 2021 年 6 月起您不能这样做。

以下是我从 AWS 支持部门获得的关于此问题的答案,我试图让 python 客户端使用 cognito JWT 令牌通过 ALB 进行调用:

根据设计,自动化客户端(例如您的 python 脚本)将无法使用此 ALB 功能。此外,ALB 不会接受客户端在请求中传递的任何 JWT 令牌。这是为了防止在与负载均衡器通信时发生任何类型的重放攻击。仅当客户端请求触发身份验证规则时,ALB 才会启动身份验证过程。

似乎设置这些 ALB cookie 的唯一方法是让网络浏览器打开身份验证页面。对不起。科尼托很糟糕。开放标准我的____。

  • 经过 2 周的努力和 2 张票以及 aws 高级支持..什么都没有..谢谢你救了我:) (2认同)