如何为不同源子域名设置独立认证Cookie?
首先明确:默认情况下,浏览器会将Cookie绑定到设置它的具体域名(不含父域名),只有当Cookie的Domain属性显式设置为.app.com时,才会在所有app.com的子域名间共享。你的问题根源应该是登录时设置Cookie的Domain被指定为了.app.com,导致跨子域名共享。
具体调整方案
- 设置Cookie时不指定
Domain属性:当在admin.app.com登录时,让API返回的Cookie不包含Domain字段,浏览器会自动将该Cookie绑定到admin.app.com,不会发送给user.app.com;同理,user.app.com登录时设置的Cookie也只会绑定到自身。 - 显式指定具体子域名作为
Domain:如果需要明确控制,可以将Cookie的Domain设置为admin.app.com(对应管理员站点)和user.app.com(对应用户站点),这样浏览器只会向匹配的域名发送对应的Cookie。
结合AWS API Gateway的配置注意事项
- 在API Gateway的集成响应中配置Cookie:确保在设置认证Cookie时,不要添加
Domain=.app.com的属性。例如,在Lambda或后端服务返回的响应头中,Cookie应设置为类似:
而非:Set-Cookie: auth_token=xxx; Path=/; HttpOnly; Secure; SameSite=StrictSet-Cookie: auth_token=xxx; Domain=.app.com; Path=/; HttpOnly; Secure; SameSite=Strict - CORS配置无需修改:你当前的
*.app.com跨域配置可以保留,只要Cookie的Domain设置正确,浏览器会自动处理不同子域名的Cookie隔离。
验证方法
在admin.app.com登录后,打开浏览器开发者工具(Application/Cookie面板),查看该域名下的Cookie是否没有Domain属性,或Domain值为admin.app.com;切换到user.app.com后,该面板中应看不到admin.app.com的Cookie,此时访问API时也不会携带该Cookie。
内容的提问来源于stack exchange,提问作者Andrew Porritt
相关产品推荐
相关产品推荐

