如何在无服务器框架上创建 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会不会不好?我认为这不会给他们增加巨大的复杂性。
好吧,我没有无服务器框架的实际示例,但我可以告诉您应该做什么。
- 创建一个 Lambda 函数作为 Amazon API Gateway Lambda 授权方 - 您可以在此处查看文档 - https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-lambda-authorizer-output.html
- 确保执行您定义的验证逻辑,以及 return 响应中的上下文对象 - 您可以定义用户数据
- 将 Amazon API 网关 Lambda 授权方添加到 API 网关 - https://docs.aws.amazon.com/apigateway/latest/developerguide/configure-api-gateway-lambda-authorization-with-console.html
- 如果授权成功你休息api lambda 可以使用你在步骤 2 中自定义的用户数据访问上下文对象
我想创建一个检查授权的中间件 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会不会不好?我认为这不会给他们增加巨大的复杂性。
好吧,我没有无服务器框架的实际示例,但我可以告诉您应该做什么。
- 创建一个 Lambda 函数作为 Amazon API Gateway Lambda 授权方 - 您可以在此处查看文档 - https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-lambda-authorizer-output.html
- 确保执行您定义的验证逻辑,以及 return 响应中的上下文对象 - 您可以定义用户数据
- 将 Amazon API 网关 Lambda 授权方添加到 API 网关 - https://docs.aws.amazon.com/apigateway/latest/developerguide/configure-api-gateway-lambda-authorization-with-console.html
- 如果授权成功你休息api lambda 可以使用你在步骤 2 中自定义的用户数据访问上下文对象