2013-04-16 58 views

回答

3

如果您使用iisnode https://github.com/auth0/passport-windowsauth在IIS上託管,那很好!護照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(); 
}); 

那麼你就可以訪問用戶ID請求對象在你的其他路線:

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

,如果你想使用用戶ID來實現自己的授權邏輯,你可以定義一箇中間件的功能是這樣的:

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

我能夠在瀏覽器中從Url獲​​得響應'(request.user.id)'。但是當我嘗試訪問相同的URL時,出現錯誤未授權錯誤。我知道這個帖子很老,但如果可能的話,你可以分享你使用過這種東西的任何例子嗎? –