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

基于Node.js与AWS Cognito实现多域SSO的跨站自动登录问题

解决AWS Cognito多域名SSO跨域自动登录问题

以下是针对你的Node.js多域名项目中Cognito SSO跨域自动登录失效问题的排查和解决步骤:

1. 检查Cognito自定义域名配置

  • 必须使用Cognito自定义域名(而非默认的auth.region.amazoncognito.com),默认域名的Cookie绑定在Amazon域名下,无法跨你的业务域名共享。
  • 配置自定义域名时,使用AWS ACM的通配符SSL证书(如*.yourdomain.com),且证书必须部署在us-east-1区域(Cognito前端托管资源要求),确保覆盖所有子域名(website1、website2等)。

2. 修正Cookie存储设置

在Cognito用户池的App客户端设置中调整Cookie参数:

  • 将Cookie Storage的Domain设置为你的根域名(如.yourdomain.com,注意前缀的点,允许所有子域名共享Cookie)。
  • 根据环境配置Cookie Attributes:
    • 生产环境强制开启Secure(仅HTTPS传输),本地开发可关闭;
    • SameSite设为None(跨域场景必需,需配合Secure);
    • HttpOnly建议开启(防止XSS攻击,若前端无需直接读取Token则保持开启)。

3. 统一App客户端配置

  • 所有网站(website1~website3)需使用同一个Cognito App客户端,或不同客户端但确保以下配置一致:
    • 在用户池的App客户端中添加所有网站的回调URL(如https://website1.yourdomain.com/callback)和登出URL;
    • 开启Authorization code grant OAuth流(SSO场景最安全的模式);
    • 至少勾选openid、profile、email这几个OAuth Scope(身份认证必需)。

4. Node.js后端的跨域与认证处理

  • 使用官方@aws-sdk/client-cognito-identity-provider或amazon-cognito-identity-js库处理认证逻辑,避免手动解析Token。
  • 配置CORS策略:
    • 设置Access-Control-Allow-Origin为对应子域名(生产环境建议动态匹配,避免通配符);
    • 开启Access-Control-Allow-Credentials: true,确保浏览器跨域请求时携带Cookie。
  • 当用户访问其他网站时,后端自动检测请求中的Cognito Cookie,调用VerifyToken或GetUser接口验证身份,无需用户重复登录。

5. 前端跳转逻辑优化

  • 所有网站的登录入口统一指向Cognito授权端点:https://your-custom-cognito-domain/oauth2/authorize,请求参数需包含对应网站的redirect_uri、client_id、response_type=code、scope=openid profile email。
  • 用户已登录状态下访问新网站时,前端直接跳转至该授权端点,Cognito会自动识别已有Cookie,返回授权码至目标网站的回调地址,后端完成Token兑换后自动登录。

调试技巧

  • 用浏览器开发者工具(Application → Cookies)检查根域名下是否存在Cognito相关Cookie,确认Domain、Secure、SameSite参数符合配置。
  • 查看Cognito的CloudWatch日志,排查授权流程中是否存在回调URL不匹配、Scope缺失等错误。

内容的提问来源于stack exchange,提问作者Rishab test

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 22:36:30