こんにちはジャレド、
パスポートがスコープをどのように扱うかについて頭を悩ませるのに苦労しています。 これが私のシナリオです:
トークンストアがあり、各トークンにはスコープがアタッチされています。 管理スコープを持つトークンのみがアクセスできるルートと、通常のトークンアクセスが必要なルートがあります。 私のアプリでは、次のようなことをします。
app.use('/ v1'、passport.authenticate('bearer'、{session:false}):
通常のケースをキャッチし、管理者権限を必要とする特定のルートについては、次のようなものをルートのミドルウェアに追加します。
.. passport.authenticate('bearer'、{セッション:false、スコープ:['admin']})
これはパスポートでサポートされていますか、それとも別の方法で行う必要がありますか?
完全を期すために、現在行っていることは次のとおりです。スコープをユーザーオブジェクトに追加し、req.user ...を使用します。後の段階で、特定のルートとスコープが一致するかどうかを確認します。
@mwawruschこれに対する解決策があり、満足していてうまく機能しています。これは、あなたが言っていることを少しクリーンアップしたバージョンです。
これで、成功への3番目の引数を渡すことができます。これは、Passportによってreq.authInfo
に添付されています。
passport.use(new BearerStrategy(
function(token, done) {
User.findOne({ token: token }, function (err, user) {
if (err) { return done(err); }
if (!user) { return done(null, false); }
return done(null, user, { scope: 'profile' });
});
}
));
次に、info引数をチェーンのさらに下流のミドルウェアで使用して、承認とアクセス制御を実装できます。
app.get('/api/userinfo',
passport.authenticate('bearer', { session: false }),
function(req, res, next) {
// access control middleware to check for required scope
if (req.authInfo.scope != 'profile') {
res.statusCode = 403;
return res.end('Forbidden');
}
return next();
}
function(req, res) {
res.json(req.user);
});
info
は単なる一般的なJSONオブジェクトであるため、アプリは提供されるものの規則を決定する必要があります。 これが汎用認証ミドルウェアの実装にも役立つことを願っています。
この機能は、それを利用するOAuthorizeおよびOAuth2orizeの開発と一致しています。 これらは、それぞれOAuth1.0サーバーと2.0サーバーを実装するために使用できます。 あなたが作成したこのテーマに関するQuoraページを見たことがあると思います。 これらを追加してもらうのは素晴らしいことです!
いつものように、フィードバックを送ってください。 乾杯!
ありがとう、とても良いです。
2012年7月13日金曜日午前8時36分、Jared Hanson <
[email protected]
書きました:
@mwawrusch私はこれに対する解決策を持っており、満足して働いています。
さて、これはあなたが言及したもののわずかにクリーンアップされたバージョンです。これで、成功への3番目の引数を渡すことができます。
req.authInfo
のパスポートpassport.use(new BearerStrategy( function(token, done) { User.findOne({ token: token }, function (err, user) { if (err) { return done(err); } if (!user) { return done(null, false); } return done(null, user, { scope: 'profile' }); }); } ));
info引数は、チェーンのさらに下流のミドルウェアで使用できます。
承認とアクセス制御を実装します。app.get('/api/userinfo', passport.authenticate('bearer', { session: false }), function(req, res, next) { // access control middleware to check for required scope if (req.authInfo.scope != 'profile') { res.statusCode = 403; return res.end('Forbidden'); } return next(); } function(req, res) { res.json(req.user); });
info
は単なる一般的なJSONオブジェクトであるため、アプリは解決する必要があります
提供されるものの規則について。 これが証明されることを願っています
汎用認証ミドルウェアの実装にも役立ちます。この機能は、それを利用するOAuthorizeおよびOAuth2orizeの開発と一致しています。 彼ら
それぞれOAuth1.0サーバーと2.0サーバーを実装するために使用できます。 おもう
あなたが作成したこのテーマに関するQuoraページを見ました。 それは素晴らしいことです
これらを追加してください!いつものように、フィードバックを送ってください。 乾杯!
このメールに直接返信するか、GitHubで表示してください。
https://github.com/jaredhanson/passport-http-bearer/issues/2#issuecomment -6966368
最も参考になるコメント
@mwawruschこれに対する解決策があり、満足していてうまく機能しています。これは、あなたが言っていることを少しクリーンアップしたバージョンです。
これで、成功への3番目の引数を渡すことができます。これは、Passportによって
req.authInfo
に添付されています。次に、info引数をチェーンのさらに下流のミドルウェアで使用して、承認とアクセス制御を実装できます。
info
は単なる一般的なJSONオブジェクトであるため、アプリは提供されるものの規則を決定する必要があります。 これが汎用認証ミドルウェアの実装にも役立つことを願っています。この機能は、それを利用するOAuthorizeおよびOAuth2orizeの開発と一致しています。 これらは、それぞれOAuth1.0サーバーと2.0サーバーを実装するために使用できます。 あなたが作成したこのテーマに関するQuoraページを見たことがあると思います。 これらを追加してもらうのは素晴らしいことです!
いつものように、フィードバックを送ってください。 乾杯!