基于角度 5 角色的身份验证,带 @auth0/角度-jwt



我需要使用https://github.com/auth0/angular2-jwt/tree/v1.0 JWT 拦截器进行基于角色的身份验证的建议。如何使用 Angular 5 执行"管理员"角色身份验证?

现在我有:登录服务器发回有效负载中带有用户 ID 的 jwt 令牌并使用 canActivate 后,我的应用程序检查令牌是否存在,然后允许进入安全站点。

@Injectable()
export class EnsureAuthenticated implements CanActivate {
  constructor(private auth: AuthService, private router: Router) {}
  canActivate(): boolean {
    if (localStorage.getItem('token')) {
      return true;
    } else {
      this.router.navigateByUrl('/login');
      return false;
    }
  }
}

和我的安全死记硬背:

export const SECURE_ROUTES: Routes = [
    { path: 'home', component: HomeComponent, canActivate: [EnsureAuthenticated] },
    { path: 'homeadmin', component: HomeadminComponent, canActivate: [AuthenticatedAdmin] },
];

在那之后,我想创建这样的东西:

@Injectable()
export class AuthenticatedAdmin implements CanActivate {
  constructor(private auth: AuthService, private router: Router) {}
  canActivate(): boolean {
    if ("in token is admin") {
      return true;
    } else {
      this.router.navigateByUrl('/login');
      return false;
    }
  }
}

在这种方法中,我需要用https://github.com/auth0/jwt-decode解码令牌你认为这是正确的方法吗?如果您有更好的解决方案,请告诉我。

是的,

因为 JWT 在有效负载部分中对您的数据进行编码。如果你想获得一些属性,你需要解码所有有效载荷。

当您在angular2-jwt中分析代码时,您会在JwtHelper类中找到方法来获取令牌到期日期。在其实现中,在第三行中找到要提取到期日期,您需要首先解码所有令牌有效负载。

下面来自 angular2-jwt 的示例

public getTokenExpirationDate(token: string): Date {
  let decoded: any;
  decoded = this.decodeToken(token);
  if (!decoded.hasOwnProperty('exp')) {
    return null;
  }
  let date = new Date(0); // The 0 here is the key, which sets the date to the epoch
  date.setUTCSeconds(decoded.exp);
  return date;
}

相关内容

  • 没有找到相关文章

最新更新