根据Auth0范围授权FeathersJs服务

时间:2018-09-28 16:51:57

标签: express auth0 feathersjs

我的feathers.js API中有一个用户服务。我想将find方法仅提供给已阅读:users范围集的经过身份验证的用户使用。

我使用express-jwt作为身份验证的中间件。 我尝试使用express-jwt-authz进行授权,但是由于req在挂钩内不可用,所以无法使用。 express-jwt库在req.user中设置作用域

  

用法JWT身份验证中间件使用   智威汤逊如果令牌有效,则将使用JSON对象设置req.user   解码后供以后的中间件用于授权和访问   控制。

有没有办法可以在钩子内访问access_token中的作用域?

我希望能够做这样的事情:

module.exports = {
  before: {
    all: [],
    find: [ authorize(['read:users']) ],
    get: [ authorize(['read:users'])],
    create: [ authorize(['write:users']) ],
    update: [ authorize(['write:users'])   ],
    patch: [ authorize(['write:users'])  ],
    remove: [ authorize(['write:users'])  ]
  }
};

1 个答案:

答案 0 :(得分:1)

通过添加将req.user数据添加到req.feathers.scope的中间件解决了该问题。

我的src/middleware/index.js文件

const addUserToReq = function(req, res, next) {
  req.feathers.user = req.user; next();
};

module.exports = function (app) {
  app.use(checkJwt); // express-jwt logic
  app.use(addUserToReq);
};

然后在钩子中,我可以像这样访问此信息

module.exports = function(expectedScopes) {
  return context => {
      let scopes = context.params.user.scope;
    }
  };
};