gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 22:24:11 26 4
gpt4 key购买 nike

我想在 NodeJS 应用程序中对 Windows 用户进行身份验证。这个有附加组件吗?有 node-krb5但它还不支持 Windows。

最佳答案

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

网络配置:

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

服务器.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();
});

然后您可以在其他路由中访问请求对象上的用户标识:

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

关于node.js - Nodejs 或 ExpressJS Windows 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16040067/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com