Nodejs或ExpressJS Windows身份validation

我想在NodeJS应用程序中validation一个Windows用户。 有没有附加的呢? 有node-krb5但它不支持窗口。

       

网上收集的解决方案 "Nodejs或ExpressJS Windows身份validation"

如果您使用iisnode在IIS上托pipe,则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(); }); 

那么你可以访问其他路由中的请求对象上的userid:

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

如果要使用用户标识实现自己的授权逻辑,则可以像下面这样定义一个中间件function:

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

在哪里看起来像这样:

 function hasRole(role) { return function(request,response,next){ //your own authorzation logic if(role == "a role") next(); else response.status(403).send(); } } 

node-sspi :发现使用起来很简单,高效。

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