如何在回送REST API上实现JWT身份验证?

时间:2019-04-09 23:16:53

标签: node.js rest jwt loopbackjs

我在Node.js上还很陌生,所以我尝试通过回送框架实现REST API,以尝试简化构建过程。我正确地完成了模型,还对一些端点进行了定制,但是当与前端(AngularJS)连接时,我找到的所有代码以及我知道要构建的代码都需要JWT令牌来执行任何需要授权/认证的任务,但是似乎在登录时环回会发送一个uid2令牌。我在stackoverflow和Github中进行了大量搜索,发现最接近的是这个(https://github.com/strongloop/loopback/issues/1905#issuecomment-310382322),但是代码似乎在此处失败:

const data = jwt.verify(id, secretKey);
        cb(null, {userId: data.id});

有什么主意吗?

1 个答案:

答案 0 :(得分:0)

简单来说,您需要知道谁在拨打电话。如果您使用默认的环回身份验证,则会看到req对象中有accessToken属性,用于标识用户。如果您想使用JWT,可以使用很多现成的模块,例如。 loopback-jwtloopback-jwt-advanced

通常,您需要做的是应用a middleware来负责用户的授权(我强烈建议您熟悉middleware这个词)。简而言之,中间件是您的请求正在经历的一层,您可以将其修改为主体或拒绝请求。

在抽象步骤中,您必须在中间件中:

  1. 从请求中获取令牌
  2. 验证令牌
  3. 根据令牌识别用户
  4. 为该给定用户创建回送AccessToken实体
  5. 将令牌放入req.accessToken中,这样环回将知道您是谁,并且可以使用ACL。

所以这差不多就是这些扩展正在做的事情。