9

我想在NodeJS应用程序中验证 Windows 用户。是否有任何附加组件呢?有,node-krb5但还不支持windows。

4

4 回答 4

6

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

网络配置:

<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();
    }
}
于 2016-04-08T14:55:58.620 回答
1

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

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

专用于使用 Kerberos 或 NTLM 在 Windows 上执行 SSO。它使用协商和 SPNEGO 令牌。

于 2020-03-05T18:33:58.070 回答
1

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

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

于 2017-03-02T08:04:30.583 回答
-1

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

于 2013-04-16T17:01:08.453 回答