Ho cercato disperatamente di trovare un metodo semplice per proteggere la mia API, ma non ne ho ancora trovato uno che funzioni. A differenza di molte API RESTful, la mia API non ha bisogno di accessi utente, token che scadono o altri metodi di autenticazione complessi (sebbene molto sicuri), il che rende la maggior parte delle esercitazioni là fuori inutilizzabili.
L'unico requisito che ho è che una richiesta POST per registrare un record nel mio database su una rotta dovrebbe essere protetta mentre una richiesta GET per accedere ai record su quella stessa route dovrebbe essere non protetta. I client che registrano i record sono attendibili e vorrei fornire le loro credenziali privatamente.
Ho provato a utilizzare questo metodo di autenticazione di base qui:
var basicAuth = require('basic-auth');
var auth = function (req, res, next) {
function unauthorized(res) {
res.set('WWW-Authenticate', 'Basic realm=Authorization Required');
return res.send(401);
};
var user = basicAuth(req);
if (!user || !user.name || !user.pass) {
return unauthorized(res);
};
if (user.name === 'foo' && user.pass === 'bar') {
return next();
} else {
return unauthorized(res);
};
};
Ma le richieste POST funzionavano ancora quando ho usato il nome utente e la password sbagliati.
Non so davvero più cosa cercare, perché pensavo che l'autenticazione di base come quella avrebbe funzionato.
EDIT: gestito per farlo funzionare dopo aver cambiato un paio di cose dopo app.post, che avevo trascurato.