Nodejs или ExpressJS Windows аутентификация

Я хотел бы аутентифицировать пользователя Windows в приложении NodeJS. Есть ли надстройка для этого еще? Существует node-krb5 , но пока не поддерживает окна.

7 голосов | спросил lostpacket 16 PMpTue, 16 Apr 2013 18:43:34 +040043Tuesday 2013, 18:43:34

3 ответа


0

Если вы размещаете на IIS с iisnode https://github.com/auth0/passport-windowsauth отлично работает! passport-windowsauth поставляется с рекламной интеграцией, но если вам нужно только имя пользователя для реализации собственной логики авторизации, вы можете сделать это следующим образом

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();
});

тогда вы можете получить доступ к идентификатору пользователя объекта запроса в других ваших маршрутах:

app.get("/api/testAuthentication", function(request, response){
    console.log(request.user.id + " is authenticated");
});

если вы хотите реализовать свою собственную логику авторизации, используя идентификатор пользователя, вы можете определить функцию промежуточного программного обеспечения следующим образом:

app.get("/api/testAuthorization", hasRole("a role"), function(request, response, next){
    console.log(request.user.id " is authenticated and authorized");
});

где hasRole выглядит так:

function hasRole(role) {
    return function(request,response,next){
        //your own authorzation logic

        if(role == "a role")
            next();
        else
            response.status(403).send();
    }
}
ответил mrplatina 8 PMpFri, 08 Apr 2016 17:55:58 +030055Friday 2016, 17:55:58
0

node-sspi: его было легко и эффективно использовать.

https://www.npmjs.com/package/node-sspi

ответил sudheeshix 2 MaramThu, 02 Mar 2017 11:04:30 +03002017-03-02T11:04:30+03:0011 2017, 11:04:30
0

Я добавил пост в блоге для этого здесь

ответил lostpacket 16 PMpTue, 16 Apr 2013 21:01:08 +040001Tuesday 2013, 21:01:08

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132