You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现同AWS Cognito用户池跨不同域名应用的自动登录?

跨顶级域名AWS Cognito自动身份认证解决方案

你有两个分属不同顶级域名(www.cat.yy.com、www.dog.xx.com)的应用,共享同一AWS Cognito用户池,要实现登录其中一个后访问另一个自动完成认证,核心难点是浏览器同源策略限制跨域Cookie共享,以下是两种可行方案:

方案一:官方推荐——Cognito Hosted UI实现单点登录(SSO)

这是最简单可靠的跨域SSO方案,步骤如下:

  • 在Cognito用户池的应用客户端配置中,分别为两个应用添加对应的回调URL(如www.cat.yy.com/callback、www.dog.xx.com/callback)和退出URL,确保这些URL已在控制台中预先注册
  • 两个应用的登录流程统一跳转至Cognito Hosted UI地址:https://<你的用户池域名>.auth.<区域>.amazoncognito.com/login
  • 用户首次在Hosted UI完成登录后,会话Cookie会存储在Cognito Hosted UI的独立域名下;当用户访问另一个应用时,应用检测到未登录状态自动跳转至Hosted UI,此时Hosted UI会识别已存在的会话,无需重复输入账号密码,直接返回授权码给当前应用的回调URL,完成自动认证

关键配置细节:

  • 两个应用必须使用同一用户池下的不同客户端ID(或同一客户端ID,推荐用不同的便于区分)
  • 可在用户池应用客户端设置中调整Hosted UI的会话有效期(默认1小时)
  • 如果是HTTP环境,需调整Cookie的SameSite属性为Lax,HTTPS环境下建议设为None并开启Secure属性,避免浏览器拦截会话Cookie

方案二:自定义后端实现跨域会话同步

如果不想依赖Hosted UI,可通过自定义后端同步会话:

  • 用户在www.cat.yy.com登录成功后,后端将Cognito返回的ID Token和Refresh Token存储到共享存储(如Redis),并生成一个随机唯一的会话ID
  • 前端将该会话ID存储到本地(建议用HttpOnly Cookie,HTTPS环境开启Secure)
  • 用户访问www.dog.xx.com时,前端携带会话ID请求后端,后端从Redis中取出对应的Cognito令牌,验证有效性后直接初始化当前应用的认证状态
  • 令牌过期时,用Refresh Token自动刷新获取新令牌,保持会话同步

安全注意事项:

  • 会话ID需具备高随机性,避免被伪造
  • Redis中的令牌需设置与Cognito令牌一致的过期时间
  • 后端需配置严格的CORS规则,仅允许yy.com和xx.com域名的跨域请求
  • 前端存储会话ID时,需做好XSS防护(如输入过滤、内容安全策略)

排查要点

  • Hosted UI未自动识别会话:检查Cognito用户池的会话配置,确认Cookie的SameSite和Secure属性设置正确,且浏览器未拦截第三方Cookie
  • 跨域请求被拒绝:确认后端CORS配置的允许域名包含目标应用域名
  • 令牌验证失败:检查应用使用的Cognito客户端ID是否正确,可通过Cognito公钥验证令牌签名有效性

内容的提问来源于stack exchange,提问作者Arokia Lijas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 11:10:21