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

微服务架构下AWS Amplify Cognito跨域Web App用户登出方案咨询

跨子域名Amplify Cognito登出解决方案

核心前提配置:统一Cookie存储与跨域共享

首先要确保Auth App的Amplify配置为使用Cookie存储认证信息,并且Cookie的domain设置为父域名.example.com,让login.example.com和app.example.com能共享该Cookie。

在Auth App的Amplify初始化代码中添加存储配置:

Amplify.configure({
  Auth: {
    // 填入你的Cognito用户池ID、客户端ID等基础配置
    storage: {
      store: window.CookieStorage,
      cookieStorage: {
        domain: '.example.com',
        path: '/',
        expires: 365,
        secure: true, // 生产环境建议开启,仅HTTPS传输
        sameSite: 'strict' // 可根据业务需求调整为'lax'
      }
    }
  }
});

登出流程实现步骤

  1. User App触发登出跳转
    在User App的登出按钮点击事件中,直接跳转到Auth App的登出处理页面:
document.getElementById('logout-btn').addEventListener('click', () => {
  window.location.href = 'https://login.example.com/logout';
});
  1. Auth App识别用户并完成登出
    当用户跳转到login.example.com/logout页面后,页面初始化Amplify后,直接调用Auth.currentAuthenticatedUser()获取当前用户(共享Cookie会让Amplify读取到认证信息),再执行登出:
import { Auth } from 'aws-amplify';

async function handleLogout() {
  try {
    // 获取当前已认证用户
    await Auth.currentAuthenticatedUser();
    // 全局登出,清除所有关联会话
    await Auth.signOut({ global: true });
    // 手动清除自定义存储的JWT Cookie(如果有额外设置)
    document.cookie = 'your-jwt-cookie=; domain=.example.com; path=/; expires=Thu, 01 Jan 1970 00:00:00 UTC; secure; sameSite=Strict;';
    // 登出完成后跳转回User App的登录页或首页
    window.location.href = 'https://app.example.com/login';
  } catch (error) {
    // 处理会话过期等无用户情况
    console.error('登出失败:', error);
    window.location.href = 'https://app.example.com/login';
  }
}

// 页面加载时自动执行登出逻辑
window.onload = handleLogout;
  1. 关键注意事项
  • 两个应用的Amplify配置中,Cognito的用户池ID、客户端ID必须完全一致,Cookie的domain设置不能出错。
  • 生产环境务必开启Cookie的secure属性,避免明文传输带来的安全风险。
  • Auth.signOut({ global: true })会清除Amplify管理的认证Cookie,若有自定义Cookie需手动清除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 15:10:02