我想創建一個中間件來檢查授權標頭,解碼令牌并將解碼后的資料發送到實際函式,就像您將 userData 添加到請求并在 Express 服務器上使用 next() 一樣,所以實際函式取回 req 上的解碼資料,然后它可以檢查要向用戶顯示的內容(如果有)。
我在無服務器框架上使用 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 函式來執行此操作并將解碼的資料發送到真實函式?
編輯:如果我在一開始就直接在函式中解碼身份驗證令牌會很糟糕嗎?我認為這不會給他們增加巨大的復雜性。
uj5u.com熱心網友回復:
好吧,我沒有無服務器框架的實際示例,但我可以告訴你應該做什么。
- 創建一個 Lambda 函式以充當 Amazon API Gateway Lambda 授權方 - 您可以在此處查看檔案 - https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-lambda-authorizer-output.html
- 確保您執行您定義的驗證邏輯,并在回應中回傳背景關系物件 - 您可以定義您的用戶資料
- 將 Amazon API Gateway Lambda 授權方添加到 API Gateway - https://docs.aws.amazon.com/apigateway/latest/developerguide/configure-api-gateway-lambda-authorization-with-console.html
- 如果授權成功,您的 rest api lambda 可以使用您在步驟 2 中自定義的用戶資料訪問背景關系物件
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/484503.html
