Nodejs或ExpressJS Windows身份validation
我想在NodeJS
应用程序中validation一个Windows用户。 有没有附加的呢? 有node-krb5
但它不支持窗口。
如果您使用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(); } }
我在这里添加了一个博客文章http://hadenoughpi.wordpress.com/2013/04/16/node-js-windows-authentication-using-edgejs/我希望这是正确的方法之一。
node-sspi
:发现使用起来很简单,高效。