我们项目用微前端拆了几个子应用,每个子应用都是独立部署的微服务,现在登录状态没法同步,用户在一个子应用登录后,切换到另一个还是未登录状态,这体验太差了。
试过把 token 存 localStorage,但跨域的子应用根本读不到;也试过主应用统一登录再传 token 给子应用,但子应用刷新页面 token 就丢了。有没有靠谱的方案?
目前主应用和子应用域名不同,比如主应用是 main.example.com,子应用是 app1.example.com、app2.example.com 这种结构。
具体来说,你可以设置一个身份验证服务器来处理所有的认证请求。主应用和子应用都通过这个身份验证服务器进行登录。用户在主应用登录后,身份验证服务器会颁发一个 JWT(JSON Web Token),这个 token 可以在子应用间安全地传递。
为了实现跨域共享 token,可以使用 cookie 来存储 token,并设置
SameSite=None和Secure标志,这样浏览器会在跨域请求时携带 cookie。但是要注意,这种方法在某些情况下可能会有安全风险,所以需要仔细配置 CORS(跨域资源共享)策略。另一种方案是使用 URL 参数或者 postMessage API 来在子应用之间传递 token。不过这种方法相对复杂,且不如使用 cookie 方便和安全。
在实现过程中,务必参考 OAuth2 或 OpenID Connect 的官方文档,遵循最佳实践,确保系统的安全性和可靠性。