En ocasiones es necesario proteger un sitio web con una contraseña, pero no es necesario tener una lista de usuarios con Cognito o cualquier otro proveedor, tal vez una protección temporal es necesaria. Es por eso que HTTP Basic Authentication
sigue siendo la mejor y más rápida solución.
En este caso vamos a utilizar Cloudfront ejecutando una función de Lambda@Edge en cada “Viewer request”.
Es necesario agregar edgelambda.amazonaws.com
dentro de Trusted entities
en el rol de la función para que pueda ser ejecutada por Edge.
index.js
const credentials = ["user1:apple", "user2:bird", "user3:cake"];
const authStrings = credentials.map((element) => `Basic ${Buffer.from(element, "utf-8").toString("base64")}`);
exports.handler = async (event) => {
const request = event.Records[0].cf.request;
const headers = request.headers || {};
if (!headers.authorization || !authStrings.includes(headers.authorization[0].value)) {
const response = {
status: "401",
statusDescription: "Unauthorized",
body: "Unauthorized",
headers: {
"www-authenticate": [{ key: "WWW-Authenticate", value: 'Basic realm="Authentication"' }],
},
};
return response;
}
return request;
};