Passport-http-bearer: Bagaimana cara kerja lingkup?

Dibuat pada 5 Mar 2012  ·  3Komentar  ·  Sumber: jaredhanson/passport-http-bearer

Hai Jared,

Saya mengalami kesulitan membungkus kepala saya tentang bagaimana paspor berurusan dengan cakupan. Inilah skenario saya:

Saya memiliki toko token, setiap token memiliki ruang lingkup yang melekat padanya. Saya memiliki beberapa rute yang hanya dapat diakses oleh token dengan lingkup admin dan rute lainnya yang memerlukan akses token normal. Di aplikasi saya, saya akan melakukan sesuatu seperti ini:

app.use('/v1', passport.authenticate('bearer', { sesi: false }):

untuk menangkap kasus normal dan untuk rute tertentu yang memerlukan hak admin, saya akan menambahkan sesuatu seperti ini ke dalam middleware rute, seperti
.. passport.authenticate('bearer', { session: false, scopes: ['admin']})

Apakah ini didukung oleh paspor atau apakah saya harus melakukannya secara berbeda?

Komentar yang paling membantu

@mwawrusch Saya punya solusi untuk ini yang saya senangi dan berfungsi dengan baik, yang merupakan versi yang sedikit dibersihkan dari apa yang Anda sebutkan.

Anda sekarang dapat meneruskan argumen ketiga untuk sukses, dan itu dilampirkan oleh Paspor di 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' });
    });
  }
));

Argumen info kemudian dapat digunakan di middleware lebih jauh ke bawah rantai untuk mengimplementasikan otorisasi dan kontrol akses.

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 hanyalah objek JSON generik, jadi aplikasi perlu menetapkan konvensi untuk apa yang disediakan. Saya berharap ini akan terbukti berguna untuk mengimplementasikan middleware otorisasi tujuan umum juga.

Fitur ini bertepatan dengan pengembangan OAuthorize dan OAuth2orize , yang memanfaatkannya. Mereka dapat digunakan untuk mengimplementasikan server OAuth 1.0 dan 2.0 masing-masing. Saya pikir saya telah melihat halaman Quora tentang topik ini yang Anda buat. Akan sangat bagus untuk menambahkan ini ke dalamnya!

Seperti biasa, kirimkan saya umpan balik. Bersulang!

Semua 3 komentar

Hanya untuk kelengkapan, inilah yang saya lakukan sekarang: Saya cukup menambahkan cakupan ke objek pengguna dan menggunakan req.user... dan pada tahap selanjutnya saya memeriksa apakah rute dan cakupan spesifik cocok.

@mwawrusch Saya punya solusi untuk ini yang saya senangi dan berfungsi dengan baik, yang merupakan versi yang sedikit dibersihkan dari apa yang Anda sebutkan.

Anda sekarang dapat meneruskan argumen ketiga untuk sukses, dan itu dilampirkan oleh Paspor di 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' });
    });
  }
));

Argumen info kemudian dapat digunakan di middleware lebih jauh ke bawah rantai untuk mengimplementasikan otorisasi dan kontrol akses.

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 hanyalah objek JSON generik, jadi aplikasi perlu menetapkan konvensi untuk apa yang disediakan. Saya berharap ini akan terbukti berguna untuk mengimplementasikan middleware otorisasi tujuan umum juga.

Fitur ini bertepatan dengan pengembangan OAuthorize dan OAuth2orize , yang memanfaatkannya. Mereka dapat digunakan untuk mengimplementasikan server OAuth 1.0 dan 2.0 masing-masing. Saya pikir saya telah melihat halaman Quora tentang topik ini yang Anda buat. Akan sangat bagus untuk menambahkan ini ke dalamnya!

Seperti biasa, kirimkan saya umpan balik. Bersulang!

Sangat baik terima kasih.

Pada Jum, 13 Jul 2012 jam 08:36, Jared Hanson <
[email protected]

menulis:

@mwawrusch Saya punya solusi untuk ini yang saya senangi dan sedang bekerja
baik, yang merupakan versi yang sedikit dibersihkan dari apa yang Anda sebutkan.

Anda sekarang dapat memberikan argumen ketiga untuk sukses, dan itu dilampirkan oleh
Paspor seharga 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' });
    });
  }
));

Argumen info kemudian dapat digunakan di middleware lebih jauh ke bawah untuk
menerapkan otorisasi dan kontrol akses.

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 hanyalah objek JSON generik, jadi aplikasi perlu diselesaikan
pada konvensi untuk apa yang disediakan. Saya berharap ini akan membuktikan
berguna untuk mengimplementasikan middleware otorisasi tujuan umum juga.

Fitur ini bertepatan dengan pengembangan OAuthorize dan OAuth2orize , yang memanfaatkannya. Mereka
dapat digunakan untuk mengimplementasikan server OAuth 1.0 dan 2.0 masing-masing. Menurut saya
Saya telah melihat halaman Quora tentang topik ini yang Anda buat. Akan sangat bagus untuk
dapatkan ini ditambahkan ke itu!

Seperti biasa, kirimkan saya umpan balik. Bersulang!


Balas email ini secara langsung atau lihat di GitHub:

https://github.com/jaredhanson/passport-http-bearer/issues/2#issuecomment -6966368

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

carera picture carera  ·  4Komentar

zsitro picture zsitro  ·  3Komentar

AaronAcerboni picture AaronAcerboni  ·  3Komentar

devfrey picture devfrey  ·  3Komentar

sontek picture sontek  ·  3Komentar