Cognito对接Cloudfront+S3静态网站失败,报redirect_mismatch错误
解决Cognito与CloudFront静态网站的redirect_mismatch错误
以下是针对你遇到问题的排查和解决步骤:
1. 确认Cognito应用客户端的回调/登出URL完全匹配
Cognito对回调URL的匹配是严格精确匹配,包括协议、域名、路径和末尾斜杠:
- 登录AWS控制台,进入Cognito用户池,找到对应的应用客户端
- 检查**回调URL(Callback URLs)和登出URL(Sign out URLs)**是否添加了
https://<cloudfront_url>.cloudfront.net/(必须带末尾斜杠,和你代码中的配置完全一致) - 注意:如果有多个环境URL,要确保CloudFront的URL已经添加到列表中,不要遗漏
2. 检查应用客户端的OAuth授权流配置
你使用的是response_type=code(授权码流),需要确认:
- 在Cognito应用客户端的OAuth 2.0设置中,勾选了授权码授予(Authorization code grant)
- 确保**允许的OAuth范围(Allowed OAuth Scopes)**包含
email、openid、profile,和你代码中的scope一致
3. 验证Angular代码中的URL配置正确性
- 检查
login()方法中的redirect_uri参数,是否和Cognito配置的回调URL完全一致,没有拼写错误(比如域名大小写、末尾斜杠缺失) - 确认
auth.service.ts中的redirectSignIn和redirectSignOut值,是否与Cognito配置的URL完全匹配,同时检查环境变量environment.cognitoAppClientId是否正确指向了目标应用客户端ID
4. 排除CloudFront的HTTPS和路径问题
- 确保CloudFront分发使用的是HTTPS协议(Cognito不允许非localhost的HTTP回调URL),检查你的CloudFront分发是否配置了有效的SSL证书,访问CloudFront URL时是否正常显示HTTPS
- 确认CloudFront的行为设置中,没有对根路径
/进行特殊的重定向(比如自动去掉末尾斜杠),否则会导致回调时的URL与Cognito配置不匹配
5. 清除浏览器缓存和Cognito会话
- 有时候浏览器缓存的旧会话或配置会导致问题,尝试清除浏览器缓存、Cookie,或者使用隐私模式测试登录流程
内容的提问来源于stack exchange,提问作者user6680
相关产品推荐
相关产品推荐

