如何在无服务器框架上创建 NodeJS 授权中间件?

How to create a NodeJS Authorization middleware on a serverless framework?

我想创建一个检查授权的中间件 header,解码令牌并将解码后的数据发送到实际函数,就像您将 userData 添加到请求并使用 next( ) 在 Express 服务器上,因此实际函数会返回请求中的解码数据,然后它可以检查要向用户显示的内容(如果有的话)。

我在无服务器框架上使用 Lambda 函数。

这是我的 Express NodeJS 本地服务器上的函数:

const authorizerFunc = async (req, res, next) => {
  let token;
  try {
    if (
      req.headers.authorization &&
      req.headers.authorization.split(" ")[0] === "Bearer"
    ) {
      token = req.headers.authorization.split(" ")[1];
    }
    if (!token) {
      req.userData = { userId: "", username: "" };
      next();
      return;
    }
    const decodedToken = jwt.verify(token, process.env.JWT_SECRET_KEY);
    console.log("DECODED TOKEN", decodedToken);
    req.userData = {
      userId: decodedToken.userId,
      username: decodedToken.username,
      email: decodedToken.email,
    };
    next();
  } catch (err) {
    req.userData = { userId: "", username: "" };
    next();
    return;
  }
};

问题是,我如何创建执行此操作并将解码数据发送到实际函数的 Lambda 函数?

编辑:一开始直接在函数中解码auth token会不会不好?我认为这不会给他们增加巨大的复杂性。

好吧,我没有无服务器框架的实际示例,但我可以告诉您应该做什么。

  1. 创建一个 Lambda 函数作为 Amazon API Gateway Lambda 授权方 - 您可以在此处查看文档 - https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-lambda-authorizer-output.html
  2. 确保执行您定义的验证逻辑,以及 return 响应中的上下文对象 - 您可以定义用户数据
  3. 将 Amazon API 网关 Lambda 授权方添加到 API 网关 - https://docs.aws.amazon.com/apigateway/latest/developerguide/configure-api-gateway-lambda-authorization-with-console.html
  4. 如果授权成功你休息api lambda 可以使用你在步骤 2 中自定义的用户数据访问上下文对象