首页 > 解决方案 > 在特定子域之间共享 cookie

问题描述

我正在开发一个基于 spring-boot 的后端应用程序和一个基于 angularjs 的前端应用程序,它们托管在具有不同子域的同一域上。

myapp-frontend.mydomain.com //my angularjs app
myapp-backend.mydomain.com //my spring-boot app
otherapp-frontend.mydomain.com //some existing app running on same domain but unrelated

当从 angularjs 调用登录 api 时,我正在尝试将包含后端生成的 jwt 令牌的 cookie 设置到浏览器。

当我在 spring-boot 中设置基本域 url 时,使用此代码将 Cookie 设置到浏览器中:

Cookie cookie = new Cookie("Authentication", jwt);
cookie.setPath("/");            
cookie.setDomain("mydomain.com"); //this works
response.addCookie(cookie);

这会为我们公司域上托管的其他应用程序设置 cookie,但不会与我的应用程序共享用户凭据。由于我希望身份验证 cookie 标头仅对我的前端应用程序可见,因此我尝试在代码中设置前端子域 url。但这不起作用。

...            
cookie.setDomain("myapp-frontend.mydomain.com"); //not setting cookie
...

我了解出于安全原因无法跨不同域设置 cookie,但为什么设置子域 url 不起作用?

出于好奇,当我签入 chrome 开发人员工具时,我尝试将后端子域放在 setDomain() 中,并且 cookie 设置在 myapp-backend.mydomain.com 下。由于它使用基本域 url,我相信我已经正确实现了 CORS。

我在这里错过了什么吗?任何投入将不胜感激。

标签: spring-bootservletscookies

解决方案


推荐阅读