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

同域名多后端用户认证:如何实现跨服务共享登录状态?

同子域名后端共享HttpOnly Cookie认证方案

核心思路:利用Cookie的Domain属性实现跨子域名共享

因为你的三个服务都属于sameDomain.io的子域名,只要正确配置Cookie的Domain参数,就能让z.sameDomain.io接收到y.sameDomain.io设置的HttpOnly Cookie,再配合共享的会话存储完成认证。


1. 调整y.sameDomain.io的Cookie配置

修改y后端设置Cookie的代码,确保Domain属性设为**.sameDomain.io**(注意开头的点),这样所有子域名服务都能读取该Cookie:

  • 关键配置项示例(以Node.js/Express为例):
    res.cookie('sessionId', userSessionId, {
      httpOnly: true,
      secure: true, // 生产环境必须开启HTTPS时设置
      domain: '.sameDomain.io',
      path: '/',
      sameSite: 'Lax', // 根据跨域需求调整,跨域请求可设为None(需配合Secure)
      maxAge: 24 * 60 * 60 * 1000 // 会话有效期
    });
    
  • 注意:如果之前的Cookie没有设置Domain,浏览器会默认绑定y.sameDomain.io,导致其他子域名无法读取,必须重新设置覆盖。

2. 让z.sameDomain.io支持Cookie读取与验证

因为z部署在AWS Lambda,需配合API Gateway完成以下配置:

  • API Gateway 配置:
    • 如果用REST API:在集成请求的"HTTP Headers"中添加Cookie,确保请求的Cookie能传递到Lambda;
    • 如果用HTTP API:默认支持Cookie传递,但需确认CORS配置允许带凭证。
  • Lambda 后端逻辑:
    • 从请求的Cookie中解析出sessionId;
    • 使用和y后端完全相同的会话存储(比如Redis、DynamoDB)查询该sessionId对应的用户信息;
    • 验证会话有效性(是否过期、是否合法),通过则返回用户数据,否则返回未认证错误。

3. 配置CORS确保前端请求能携带Cookie

前端x.sameDomain.io请求z时,必须携带凭证,同时z的CORS响应头要正确配置:

  • 前端请求配置:
    • 用Axios的话添加withCredentials: true;
    • 用Fetch的话设置credentials: 'include'。
  • z后端CORS响应头:
    Access-Control-Allow-Origin: https://x.sameDomain.io
    Access-Control-Allow-Credentials: true
    Access-Control-Allow-Methods: GET, POST, PUT, DELETE
    Access-Control-Allow-Headers: Content-Type
    
    注意:Access-Control-Allow-Origin不能设为*,必须指定前端的具体域名。

4. 备选方案:JWT Token认证(若Cookie共享受限)

如果后续可能扩展到跨主域名服务,或者不想依赖会话存储,可以改用JWT:

  • y登录成功后,生成包含用户信息的JWT Token,同时把Token存入Domain为.sameDomain.io的HttpOnly Cookie;
  • 前端请求z时,Cookie会自动携带Token,z后端用和y相同的密钥验证JWT签名,解析出用户信息;
  • 这种方式无需共享会话存储,JWT本身包含认证信息,适合分布式服务场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 21:20:27