Aquí mi intento con Javascript
Debido a que NodeJS recibe esta autenticación en base64 en los headers, hay que decodearlo.
Para esto hice un middleware autenticador, que es bastante sencillo de usar.
- Creamos la función de autenticación
bookAuthenticator
const bookAuthenticator = (req, res, next) => {
// Definimos nuestra variable que contendra la informacion de auth
let authorization = [];
// Verificamos si se envian headers de autenticación por HTTP
if(req.headers.authorization) {
// req.headers.authorization es encodeado en base64
// Tal como: "Basic bHVjbmVvbmN0OjEyMzQ="
// Con un Buffer lo decodeamos: Buffer.from('string','base64')
authorization = Buffer
// Separamos en dos arreglos, para usar solo el string encodeado
// ["Basic", "bHVjbmVvbmN0OjEyMzQ="]
.from(req.headers.authorization.split(" ")[1], 'base64')
// Lo transformamos en utf-8
// "lucneonct:1234"
.toString('utf-8')
// Lo separamos por el ":" en un array
// ["lucneonct", "1234"]
.split(':');
}
// Obtiene username del primer indice del arreglo y la contraseña del segundo
const authUser = authorization[0];
const authPassword = authorization[1];
// Verificamos si los datos no coinciden con nuestro usuario hardcodeado
if( authUser !== "Lucneonct" && authPassword !== "1234") {
// Rompe la cadena y retorna un 403 Forbidden
return res.status(403).json({ status: 'Forbidden: missing or invalid auth' });
}
// Seguimos con nuestro código una vez que todo esté bien
next()
}
- Usamos nuestro middleware
bookAuthenticator en nuestra ruta get
app.get('/', bookAuthenticator, (req, res) => {
// ... Nuestro código para obtener el libro
}
- Lo probamos con
curl lucneonct:1234@localhost:5000/?resource_type=books | jq