Express网关设置自定义策略路径通配符

时间:2020-05-23 14:02:28

标签: express express-gateway

我创建了一个基本的插件,该插件执行一些自定义的Jwt验证,并在策略中的请求上设置了一个“用户”对象。

这不是很相关,但是中间件的伪造看起来像这样:

const { getJwtFromCookies, getJwtFromHeader } = require("../lib/jwt");
const { verifyToken } = require("../lib/jwt");


module.exports = {

  name: 'jwt-policy',

  policy: (actionParams) => {
    return (req, res, next) => {
      console.log('test plugin');
      const jwt = getJwtFromCookies(req) || getJwtFromHeader(req);

      try {
        req.user = verifyToken(jwt);
        console.log('plugin:', req.user);

      } catch (e) {
        res.send(401);

      }

      next() // calling next policy
    };
  }
};

在api网关中,当我未指定路径时会正确调用该插件。
但是当我使用这样的通配符放置路径时,它不会被调用(我不想在所有路径上都调用插件,我也不需要单个“精确”路径:

  user:
    apiEndpoints:
    - user
    policies:
      - jwt-policy:
          condition: # this action is executed only if path is exactly /v1/auth
            name: pathExact
            path: '/v1/auth/*'

此正确的声明是什么?在文档中我在哪里找到它?

1 个答案:

答案 0 :(得分:0)

从源代码中,我已经看到所需的格式为:

  - jwt-policy:
      condition: 
        name: pathMatch
        pattern: /v1/auth/*

我仍在处理插件中在req对象上设置的属性不会传播到实际端点的问题。对于我来说,这仍然是一个问题。

编辑:使用插件中的egContext属性解决的第二个问题:

req.egContext.authUser = verifyToken(jwt);

并定义一个请求转换器:

  - request-transformer:
    - action:
        body:
          add:
            authUser: req.egContext.authUser

将此属性添加到请求正文中而不是立即添加到req对象不是很理想,但是我认为Express Gateway当前不支持此属性。我为此打开了功能请求。