Nodejs或ExpressJS Windows身份验证

时间:2013-04-16 14:43:35

标签: node.js express windows-authentication

我想在NodeJS应用中验证Windows用户。 这有什么附加功能吗?有node-krb5但它还不支持Windows。

4 个答案:

答案 0 :(得分:4)

如果您使用iisnode https://github.com/auth0/passport-windowsauth在IIS上托管,效果很好! passport-windowsauth带有广告集成,但如果您只想要用户名来实现自己的授权逻辑,那么就可以这样做

的web.config:

TwitterStub

server.js:

<system.webServer>
    <iisnode promoteServerVars="LOGON_USER" />
</system.webServer>

然后您可以访问其他路径中的请求对象上的用户ID:

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");
});

其中hasRole看起来像这样:

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

答案 1 :(得分:1)

android { compileSdkVersion 24 buildToolsVersion "24.0.2" defaultConfig { applicationId "com.yourpackage.yourapp" minSdkVersion 11 targetSdkVersion 24 versionCode 4 versionName "1.3" } ... } :发现使用起来既简单又有效。

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

答案 2 :(得分:0)

我在这里添加了一篇博文http://hadenoughpi.wordpress.com/2013/04/16/node-js-windows-authentication-using-edgejs/ 我希望这是正确的方法之一。

答案 3 :(得分:-1)

免责声明:我是node-expose-sspi的作者。

https://github.com/jlguenego/node-expose-sspi

专门用于在Windows上使用Kerberos或NTLM进行SSO。 它使用Negotiate和SPNEGO令牌。