2013-04-16 18 views

答えて

3

IISでiisnode https://github.com/auth0/passport-windowsauthをホストするとうまく動作します!パスポート-windowsauthは、広告統合が付属していますが、唯一、独自のauthorzationロジックを実装するためにユーザ名をしたい場合は、この

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, 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"); 
}); 
function hasRole(role) { 
    return function(request,response,next){ 
     //your own authorzation logic 

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

しかし、IISの後ろにノードを置くと、Nodeのメリットがかなり失われてしまいます。 – DaNeSh

+0

ブラウザのURLから '(request.user.id)'という応答を得ることができました。同じURLにアクセスしようとすると、不正なエラーが発生します。私はこの投稿が古いことを知っていますが、可能であれば、あなたはこの種のものを使った例を共有できますか? –

0

node-sspi:hasRoleもがこのようになります

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

:ユーザーIDを使用して、独自の承認ロジックを実装する場合次のようなミドルウェア機能を定義することができ、それが簡単かつ効率的に発見しました使用する。

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