在两个子域之间保留身份验证令牌

时间:2019-05-31 10:52:12

标签: angular authentication token single-page-application

我有一个带有两个不同子域的Angular 7 Web应用程序: sub1.myurl.com sub2.myurl.com

它们都具有相同的登录端点,并且内部的所有API都在寻找身份验证令牌。

您可以在应用程序内切换一个'命名空间',在某些情况下,它会将您从 sub1 转发到 sub2 域,反之亦然,这也意味着页面刷新。

当前,我将身份验证令牌保存在本地存储中。因此,在用户从 sub1 重定向到 sub2 的情况下,本地存储内容会更改,并且身份验证令牌也会丢失。

我已经读过cookie是解决此问题的方法,但再次可能会出现安全问题。

我也尝试使用ngx-cookie-service,但找不到添加通用cookie的方法,该cookie在没有子域的localhost中以及在sub1.myurl.com和sub2.myurl的生产环境中都可用。 com?

1 个答案:

答案 0 :(得分:0)

实际上是我自己弄清楚的。如果有人遇到同样的问题,我将在此处发布我的解决方案。

   const loc = window.location;
   if (loc.hostname === 'sub1.myurl.com' || loc.hostname === 'sub2.myurl.com') {
      this.cookieService.set('token', session, null, '/', '.myurl.com', true);
   } else {
      this.cookieService.set('token', session);
   }

因此,基于 window.location.hostname 我设置了不同的cookie。对于必须在子域之间共享Cookie的生产环境,如果在 domain 参数的前面加一个点(。),则它也适用于该域的子域。