我正在为我的 Web 应用程序使用以下技术堆栈
- CloudFront 作为代理和 CDN
- S3 或 CloudFront 为 AngularJS 应用程序提供服务
- APIGateway origin to CloudFront for REST API
- 具有 CognitoAuthorizer 的 Cognito UserPool,用于在 API Gateway 中进行身份验证
为了存储Web应用程序用户会话,我通常将来自Cognito的JWT存储在客户端Cookie,HTML5 LocalStorage或SessionStorage中。
但是,我很想知道 CloudFront 签名 Cookie 可以为 Web 应用程序提供会话状态。我希望使用签名 Cookie 来存储 JWT,并使用 Edge Lambda 将签名 Cookie 映射到授权标头以对 API 网关进行身份验证。我有兴趣知道
- 使用 CloudFront 签名的 Cookie 来存储 JWT 是否有效?
- 在 Web 应用程序的签名 Cookie 中存储会话状态是否是一种好方法?
- 如果是这样,围绕它的最佳实践是什么?我不确定使用Edge Lambda是正确的方法。
CloudFront 签名 Cookie 无法存储自定义数据。因此,无法将 AWS Cognito 用户池id_token存储在签名 Cookie 中。因此,受到质疑的方法不可能继续下去。
替代方法
相反,登录 API 网关路由可以同时设置 SignedCookie 和单独的 Cookie 来存储 JWT 令牌,其中 Cookie 在将请求转发到 API 网关之前,在预配置的边缘 Lambda 上进行验证并添加到授权标头中。