【问题标题】:Express gateway set custom policy path wildcardExpress 网关设置自定义策略路径通配符
【发布时间】:2020-05-25 18:07:09
【问题描述】:

我创建了一个基本插件,它可以进行一些自定义 Jwt 验证,并在策略中的 req 上设置一个“用户”对象。

这并不真正相关,但中间件 plicy 看起来像这样:

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/*'

这个的正确声明是什么/我在文档中的哪里可以找到这个?

【问题讨论】:

    标签: express express-gateway


    【解决方案1】:

    从源代码中我看到需要的格式是:

      - 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 目前不支持。我为此打开了一个功能请求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-09
      • 2023-03-31
      • 2011-03-31
      • 2012-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多