Unos días después de publicar el post sobre cómo para validar JWT de Cognito en Lambda@Edge
, encontré que AWS tiene una librería (aws-jwt-verify
) que reduce considerablemente el código necesario para realizar este tipo de validaciones.
Esta es la versión actualizada:
const { CognitoJwtVerifier } = require("aws-jwt-verify");
const jwtVerifier = CognitoJwtVerifier.create({
userPoolId: "us-east-1_XXXXXXXXX",
tokenUse: "access",
clientId: "xxxxxxxxxxxxxxxxxxxxxxxxxx",
});
exports.handler = async (event) => {
const request = event.Records[0].cf.request;
const headers = request.headers || {};
// CORS Preflight
if (`${request.method}`.toUpperCase() === "OPTIONS") {
return request;
}
try {
// Strip out "Bearer " to extract JWT token only
const accessToken = headers.authorization[0].value.slice(7);
await jwtVerifier.verify(accessToken);
} catch (err) {
// Invalid token.
return { status: "401" body: "Unauthorized" };
}
// Remove authorization header
delete request.headers.authorization;
return request;
};