2013-04-16 20 views

Odpowiedz

3

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

Ale kiedy umieścimy węzeł za IIS, tracimy wiele korzyści Node! – DaNeSh

+0

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? –