微服务架构下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' } } } });
登出流程实现步骤
- User App触发登出跳转
在User App的登出按钮点击事件中,直接跳转到Auth App的登出处理页面:
document.getElementById('logout-btn').addEventListener('click', () => { window.location.href = 'https://login.example.com/logout'; });
- 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;
- 关键注意事项
- 两个应用的Amplify配置中,Cognito的用户池ID、客户端ID必须完全一致,Cookie的domain设置不能出错。
- 生产环境务必开启Cookie的
secure属性,避免明文传输带来的安全风险。 Auth.signOut({ global: true })会清除Amplify管理的认证Cookie,若有自定义Cookie需手动清除。
内容的提问来源于stack exchange,提问作者Hokie2014
相关产品推荐
相关产品推荐

