CloudFront-S3架构下Lambda@Edge+Cognito认证子路径访问失败
S3+CloudFront静态网站子路径访问403权限拒绝问题
环境架构
- 静态网站托管于S3,通过CloudFront分发
- 使用Cognito实现身份认证
- 借助Lambda@Edge函数处理登录重定向与JWT令牌验证
认证流程
1. 检查请求是否携带Cookie或查询字符串参数 2. 若两者都无,重定向至Cognito登录页面 3. 用户登录/注册后,Cognito携带授权码(code)重定向回网站 4. 使用授权码生成ID Token,将其设置为Cookie后重定向至网站 5. 通过JWT和.well-known.json验证Cookie有效性(未过期、受众匹配)
问题现象
- 直接访问根路径(my-website/)、复制根路径URL到新标签页,网站正常加载(状态码200)
- 点击站内href链接、直接粘贴子路径链接(如my-website/docs/getting-started)时,返回Access Denied(403状态码)
- 根路径请求会触发Lambda@Edge的重定向逻辑;子路径请求未触发Lambda@Edge,直接返回403
已排查项
- 已配置Lambda@Edge触发所有Viewer请求
- 已将认证Cookie的路径设置为根路径(
/)
相关截图
- 根路径请求成功截图
- 子路径请求失败截图
- 失败请求的响应头截图
- 失败请求的响应头截图
内容的提问来源于stack exchange,提问作者Ashish Purohit
相关产品推荐
相关产品推荐

