2014-04-10 12 views
5

Attualmente sto sviluppando un servizio web RESTful con NodeJS e restify.autenticazione di base con Node.js e restify

Ho tutto in esecuzione con node-mysql per il database, ma vorrei anche implementare l'autenticazione di base HTTP.

L'ho fatto solo una volta con Apache e un file .htaccess.

Ma ecco il server web viene fornito con restify e mi metto così:

var server = restify.createServer({ 
    name: 'my webservice' 
}); 

C'è un parser plugin di autenticazione elencati nella documentazione restify (http://mcavage.me/node-restify/#Bundled-Plugins), ma io non riesco a capire come usarlo .

Il valore req.username è sempre impostato su Anonimo, anche quando utilizzo http://user:[email protected].

La cosa migliore sarebbe se potessi usarlo con un file .htpasswd per memorizzare/accedere all'utente e passare.

Qualcuno sa come implementarlo con Restify o un altro modulo?

risposta

1

Dai un'occhiata allo Passport.js. Supporta Basic HTTP come uno degli schemi di autenticazione.

+0

sembra promettente ... Ci provo io – Nico

0

Il valore req.username è sempre impostato su anonimo, anche quando uso http: // utente: passaggio @ url ....

La documentazione sembra suggerire che si aspetta la credenziali nell'intestazione non nell'URL, potrebbe essere necessario utilizzare Curl o qualche altro strumento oltre a un browser per creare intestazioni con intestazioni di autorizzazione.

+0

Ok ... ho pensato che verranno mandati nell'intestazione anche quando li inserisco nell'URL. – Nico

+0

@nico - Immagino che un browser possa avere questa caratteristica, ma non puoi esserne sicuro. Non ho mai visto il formato url che mostri in uso. – Hogan

-3

Con Express è possibile fare qualcosa di simile:

var auth = express.basicAuth(function(user, pass) { 
    return (user == "admin" && pass == "1234"); 
},'Super duper secret area'); 

app.get('/test', auth, function(req, res){ 
    ... 
}); 

expressjs.com

+0

Non voglio usare express.Ha incluso troppo che non ho bisogno ... ecco perché ho scelto restify.js – Nico

5

finalmente ho trovato un modo per farlo senza moduli aggiuntivi.

Per prima cosa ho inviare l'intestazione correkt:

var auth = req.headers['authorization']; 
res.statusCode = 401; 
res.setHeader('WWW-Authenticate', 'Basic realm="Secure Area"'); 
res.end('need creds'); 

Poi controllo l'utente e pass e se il suo ok quindi inviare il codice di stato corretto

res.statusCode = 200; // OK 

Se la password non è corretta:

res.statusCode = 401; // Force them to retry authentication 
    res.setHeader('WWW-Authenticate', 'Basic realm="Secure Area"'); 
    res.end('<html><body>You shall not pass</body></html>'); 

Questo funziona abbastanza bene. Ho solo qualche problema a leggere il .htpasswd e la password criptata. Qualcuno sa come posso controllare una password semplice contro un file .htpasswd?

+0

Pensi che potrebbe funzionare anche nel mio caso: http://stackoverflow.com/questions/40287897/how-is-filled -request-header-authorization? O dovrei cambiare il mio vecchio codice e usare solo le estensioni "restify"? – Filippo1980