51 votes

Authentification HTTP de base dans Node.JS?

Je suis en train d'écrire un RESTE de l'API serveur avec NodeJS comme celui utilisé par Joyent, et tout est ok sauf que je ne peux pas vérifier normal d'authentification de l'utilisateur. Si je saute d'un terminal et n' curl -u username:password localhost:8000 -X GET, je ne peux pas obtenir les valeurs de nom d'utilisateur:mot de passe sur le NodeJS serveur http. Si mon NodeJS serveur http est quelque chose comme

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(1337, "127.0.0.1");

, ne devrais-je pas obtenir les valeurs de nom d'utilisateur:mot de passe quelque part dans le req objet qui vient de la fonction de rappel ? Comment puis-je obtenir ces valeurs sans avoir à utiliser Connect basic http auth ?

101voto

Rob Raisch Points 5835

Le nom d'utilisateur:mot de passe figure dans l'en-tête d'Autorisation en tant que chaîne base64.

Essayez ceci:

http.createServer(function(req,res){
  var header=req.headers['authorization']||'',        // get the header
      token=header.split(/\s+/).pop()||'',            // and the encoded auth token
      auth=new Buffer(token, 'base64').toString(),    // convert from base64
      parts=auth.split(/:/),                          // split on colon
      username=parts[0],
      password=parts[1];

  res.writeHead(200,{'Content-Type':'text/plain'});
  res.end('username is "'+username+'" and password is "'+password+'"');

}).listen(1337,'127.0.0.1');

Détails sur http autorisation peut être trouvé à http://www.ietf.org/rfc/rfc2617.txt

38voto

Jeroen Points 4979

Si vous utilisez express, vous pouvez utiliser la connexion plugin (inclus avec l'express):

//Load express
var express = require('express');

//User validation
var auth = express.basicAuth(function(user, pass) {     
   return (user == "super" && pass == "secret");
},'Super duper secret area');

//Password protected area
app.get('/admin', auth, routes.admin);

8voto

Phillip Kovalev Points 1701

Vous pouvez utiliser nœud-http digest pour l'authentification basique ou everyauth, si l'ajout de l'autorisation de services externes sont en vous de la feuille de route.

6voto

Grant Li Points 381

J'utilise ce code pour mon propre starter sites avec auth.

Il n'plusieurs choses:

  • basic auth
  • de retour index.html pour / itinéraire
  • servir le contenu sans s'écraser et silencieux gérer l'erreur
  • permettre de port paramètre lors de l'exécution
  • le montant minimal de l'exploitation forestière

Avant d'utiliser le code, npm install express

var express = require("express");
var app = express();

//User validation
var auth = express.basicAuth(function(user, pass) {     
     return (user == "username" && pass == "password") ? true : false;
},'dev area');

/* serves main page */
app.get("/", auth, function(req, res) {
try{
    res.sendfile('index.html')
}catch(e){}
});

/* add your other paths here */

/* serves all the static files */
app.get(/^(.+)$/, auth, function(req, res){ 
try{
    console.log('static file request : ' + req.params);
    res.sendfile( __dirname + req.params[0]); 
}catch(e){}
});

var port = process.env.PORT || 8080;
app.listen(port, function() {
    console.log("Listening on " + port);
});

3voto

Dave Pacheco Points 525

Le restify cadre (http://mcavage.github.com/node-restify/) comprend un en-tête d'autorisation analyseur "de base" et "signature" schémas d'authentification.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X