如何仅使用JWT而不使用回送的用户模型来设置对回送API的基于滚动的访问?

时间:2019-02-14 12:00:33

标签: node.js express jwt loopbackjs loopback

我正在尝试使用JWT保护回送API,但我需要为每个端点和每个CRUD操作赋予不同的权限级别。假设API使用者将已经获得有效的令牌,并且可以按访问级别(即只读或管理员)具有令牌。

目前,我已通过中间件获得了有效JWT的授权,但我只将此方法用于所有或仅一个端点。 有没有一种方法可以使不同的JWT对不同的端点和CRUD操作具有不同的访问级别?

我已经在middleware.json中注册了一个auth.js文件:

"auth": {
     "./middleware/auth.js": {
      "paths": [
        "${restApiRoot}"
      ]
    }
  }

这是正在检查JSON Web令牌的auth.js文件:

'use strict';

const jwt = require('jsonwebtoken');
const config = require('../config.json');

module.exports = function() {
  return function(req, res, next) {
    function fromHeaderOrQueryString(req) {
      if (req.headers &&
        req.headers.authorization &&
        req.headers.authorization.split(' ')[0] === 'Bearer') {
        return req.headers.authorization.split(' ')[1];
      } else if (req.query && req.query.access_token) {
        return req.query.access_token;
      }
      return null;
    };

    var token = fromHeaderOrQueryString(req);

    if (!token)
      return res.status(400).send({auth: false, message: 'No token provided.'});

    jwt.verify(token, config.secret, function(err, decoded) {
      if (err)
        return res.status(401).send({
          auth: false,
          message: 'Failed to authenticate token.',
        });
      req.userId = decoded.id;
      next();
    });
  };
};

0 个答案:

没有答案