Desidero autenticare un utente Windows nell'app NodeJS
. Esiste ancora un componente aggiuntivo? C'è node-krb5
ma non supporta ancora Windows.Nodejs o ExpressJS Autenticazione Windows
risposta
Ho aggiunto un post per questo post qui http://hadenoughpi.wordpress.com/2013/04/16/node-js-windows-authentication-using-edgejs/ Spero che questo sia uno dei modi giusti.
Se l'host su IIS con iisnode https://github.com/auth0/passport-windowsauth funziona bene! tessera windowsauth è dotato di un'integrazione annuncio, ma se si desidera solo il nome utente al fine di attuare la propria logica authorzation si può fare in questo modo
web.config:
<system.webServer>
<iisnode promoteServerVars="LOGON_USER" />
</system.webServer>
server.js:
var passport = require('passport');
var WindowsStrategy = require('passport-windowsauth');
app.use(passport.initialize());
app.use(passport.session());
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(user, done) {
done(null, user);
});
passport.use(new WindowsStrategy({
integrated: true
}, function(profile,done) {
var user = {
id: profile.id,
};
done(null, user);
}));
app.all("*", passport.authenticate("WindowsAuthentication"), function (request,response,next){
next();
});
allora è possibile accedere al userid sull'oggetto richiesta nelle altre vie:
app.get("/api/testAuthentication", function(request, response){
console.log(request.user.id + " is authenticated");
});
se si desidera implementare la propria logica di autorizzazione utilizzando l'ID utente è possibile definire una funzione middleware come questo:
app.get("/api/testAuthorization", hasRole("a role"), function(request, response, next){
console.log(request.user.id " is authenticated and authorized");
});
dove hasRole assomiglia a questo:
function hasRole(role) {
return function(request,response,next){
//your own authorzation logic
if(role == "a role")
next();
else
response.status(403).send();
}
}
Ma quando mettiamo il nodo dietro IIS, perdiamo molti vantaggi del nodo! – DaNeSh
Sono in grado di ottenere la risposta '(request.user.id)' da Url nel browser. ma quando sto cercando di accedere allo stesso URL, ricevo errore Errore non autorizzato. So che questo post è vecchio ma, se possibile, puoi condividere qualche esempio in cui hai usato questo genere di cose? –
node-sspi
: trovato facile ed efficiente usare.
Questo sconfigge lo scopo delle finestre di autenticazione che è single sign on. La tua soluzione richiede il passaggio di nome utente, dominio e password. –