2013-04-16 3 views

ответ

0

Я добавил запись в блоге для этого здесь http://hadenoughpi.wordpress.com/2013/04/16/node-js-windows-authentication-using-edgejs/ Надеюсь, это один из правильных способов.

+1

Это побеждает цель окна AUTH которая единый вход. Ваше решение требует передачи имени пользователя, домена и пароля. –

3

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

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

Но когда мы устанавливаем узел за IIS, мы теряем много преимуществ в Ноде! – DaNeSh

+0

Я могу получить ответ '(request.user.id)' из Url в браузере. но когда я пытаюсь получить доступ к одному и тому же URL-адресу, я получаю ошибку Несанкционированная ошибка. Я знаю, что этот пост старый, но если возможно, можете ли вы поделиться любым примером, где вы использовали такие вещи? –

Смежные вопросы