node.js – Nodejs或ExpressJS Windows身份验证

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

解决方法

如果你在IIS上使用iisnode 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,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"),next){
    console.log(request.user.id " is authenticated and authorized");
});

其中hasRole看起来像这样:

function hasRole(role) {
    return function(request,next){
        //your own authorzation logic

        if(role == "a role")
            next();
        else
            response.status(403).send();
    }
}

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...