Chciałbym uwierzytelnić użytkownika systemu Windows w aplikacji NodeJS
. Czy jest jeszcze jakiś dodatek do tego? Jest node-krb5
, ale nie obsługuje jeszcze okien.Nodejs lub ExpressJS Windows Authentication
Odpowiedz
Dodałem wpis na blogu do tego tutaj http://hadenoughpi.wordpress.com/2013/04/16/node-js-windows-authentication-using-edgejs/ Mam nadzieję, że jest to jeden z właściwych sposobów.
Jeśli hostujesz na IIS z iisnode https://github.com/auth0/passport-windowsauth działa ładnie! paszportowe windowsauth pochodzi z integracji reklam, ale jeśli chcesz tylko nazwę użytkownika, aby zaimplementować własną logikę authorzation można to zrobić jak ten
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();
});
następnie można uzyskać dostęp do identyfikatora na obiekcie żądania w swoich innych trasach:
app.get("/api/testAuthentication", function(request, response){
console.log(request.user.id + " is authenticated");
});
jeśli chcesz zaimplementować własną logikę autoryzacji przy użyciu identyfikatora użytkownika można zdefiniować funkcję middleware takiego:
app.get("/api/testAuthorization", hasRole("a role"), function(request, response, next){
console.log(request.user.id " is authenticated and authorized");
});
gdzie hasRole wygląda następująco:
function hasRole(role) {
return function(request,response,next){
//your own authorzation logic
if(role == "a role")
next();
else
response.status(403).send();
}
}
Ale kiedy umieścimy węzeł za IIS, tracimy wiele korzyści Node! – DaNeSh
Jestem w stanie uzyskać odpowiedź '(request.user.id)' z Url w przeglądarce. ale gdy próbuję uzyskać dostęp do tego samego adresu URL, pojawia się błąd Nieautoryzowany błąd. Wiem, że ten wpis jest stary, ale jeśli to możliwe, czy możesz podzielić się przykładem, w którym użyłeś tego rodzaju rzeczy? –
node-sspi
: okazało się, że jest łatwy i wydajny używać.
Ta celowość okien uwierzytelniania, który jest pojedynczy znak. Twoje rozwiązanie wymaga podania nazwy użytkownika, domeny i hasła. –