Как вы настраиваете основанный на рулоне доступ к API обратной связи только с использованием JWT и без использования пользовательской модели обратной связи? - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь защитить петлевой API с помощью JWT, но мне нужно предоставить разные уровни разрешений для конечной точки и для операции CRUD.Предполагается, что потребитель API уже получит действительный токен и может иметь токен для уровня доступа, то есть только для чтения или для администратора.

В настоящее время у меня есть авторизация действительного JWT через промежуточное ПО, но у меня есть только это, чтобы работать для всех или только для одной конечной точки.Есть ли способ дать разные JWT разные уровни доступа к разным конечным точкам и операциям CRUD?

Я зарегистрировал файл auth.js в middleware.json:

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

Этофайл auth.js, проверяющий веб-токен JSON:

'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();
    });
  };
};
...