Angular 7-什么是守卫的最佳方法

时间:2018-12-27 09:52:06

标签: angular

我是Angular的新手。我已经介绍了一些Angular教程,并且作为后端开发人员,我想知道用户可以使用伪造的JWT导航到受保护的模板是如何被接受...在我的应用程序中,我创建了/dashboard,其中包括guard。 / p>

{ path: 'dashboard', component: HomeComponent, canActivate: [AuthGuard]}

我的守卫方法的主体:

  canActivate(): boolean {
    if (this.authenticationService.isAuthenticated()) {
      return true;
    } else {
      this.router.navigate(['/']);
      return false;
    }
  }

isAuthenticated 是一种服务方法(我将angular2-jwt用作jwtHelper):

  isAuthenticated(): boolean {
    const token = localStorage.getItem('token');
    if (!token) { return false; }
    return !this.jwtHelper.isTokenExpired(token);
  }

我可以将任何JWT放置到本地存储中并通过,因为它仅检查JWT是否具有有效格式。即使我添加了禁止从服务器获取数据的拦截器,用户仍然可以导航到受保护的模板。我不接受该解决方案。最好的方法是什么?是否应该向服务器请求模板之间的所有导航(例如/dashboard-> /admin,以检查JWT是否有效?如果是,如何实现呢?除非使我的最佳实践是什么?受保护的模板对于经过身份验证的用户是不可见的,并使其在伪造的JWT上不可侵犯?

1 个答案:

答案 0 :(得分:0)

您是否调查过JWT的索赔?您可以在其中放置元数据,以告诉您有关用户访问权限的信息,您可以使用这些元数据来确定用户是否应有权访问路由。参见:https://jwt.io/introduction/