Angular 2+前端认证

时间:2017-11-17 09:57:02

标签: angular authentication jwt

在Angular 2应用程序中,我正在使用JWT对用户进行身份验证。令牌返回给客户端,然后存储在localStorage中。

我想保护某些Angular路由,以便只有登录用户才能访问它们。

到目前为止,当令牌返回时,我在配置服务中设置变量isAuthenticated,并使用它来决定用户是否可以导航到受保护的路由。但是这个变量当然不会在刷新页面后持续存在。所以我删除了isAuthenticated,而是在决定是否允许用户访问受保护的路由之前,检查令牌是否存在(并且尚未过期)。

我正在使用Angular的路由器模块来处理路由,并使用canActivate挂钩来查看用户是否经过身份验证/登录。

app.module:

{ path: 'profile', component: ProfileComponent, canActivate: [AuthGuard] }
// ... other routes

然后是AuthGuard(基本上如果存在令牌并且它没有过期,则激活路线):

canActivate() {
  let base64Url = localStorage.getItem('token').split('.')[1];
  let base64 = base64Url.replace('-', '+').replace('_', '/');
  let token = JSON.parse(window.atob(base64));
  let now = new Date().getTime();
  return (localStorage.getItem('token') && token.exp > now) ? true : false;
}

我的问题是,我想假冒JWT令牌以获取对Angular路线的访问权限是微不足道的,但我不想仅仅因为用户导航到另一个页面而进行API调用。那么这个实现是最好的方法吗?必要的API调用(GET,POST,PUT,DELETE等)仍将通过授权过程,因此它只是容易受到攻击的前端路由。

这是正常做法,还是我应该使用另一种方法?我绝对不想通过网站安全重新发明轮子。

0 个答案:

没有答案