9

アプリで Windows ユーザーを認証したいと思いますNodeJS。これに対するアドオンはまだありますか? ありますがnode-krb5、まだ Windows をサポートしていません。

4

4 に答える 4

6

iisnode を使用して IIS でホストしている場合、https://github.com/auth0/passport-windowsauthはうまく機能します。Passport-windowsauth には広告統合が付属していますが、独自の承認ロジックを実装するためにユーザー名のみが必要な場合は、次のように実行できます

web.config:

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

次に、他のルートでリクエスト オブジェクトのユーザー 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

ここにブログ投稿を追加しましたhttp://hadenoughpi.wordpress.com/2013/04/16/node-js-windows-authentication-using-edgejs/ これが正しい方法の1つであることを願っています.

于 2013-04-16T17:01:08.453 に答える