Passport-http-bearer: Wie funktionieren Bereiche?

Erstellt am 5. März 2012  ·  3Kommentare  ·  Quelle: jaredhanson/passport-http-bearer

Hallo Jared,

Es fällt mir schwer, mir Gedanken darüber zu machen, wie der Pass mit Zielfernrohren umgeht. Hier ist mein Szenario:

Ich habe einen Token Store, an jeden Token ist ein Geltungsbereich angehängt. Ich habe einige Routen, auf die nur Token mit Administratorbereich zugreifen können, und andere, die normalen Tokenzugriff erfordern. In meiner App würde ich so etwas tun:

app.use('/v1', password.authenticate('bearer', { session: false }):

Um den Normalfall abzufangen und für bestimmte Routen, die Administratorrechte erfordern, würde ich so etwas in die Middleware der Route einfügen, wie z
..passport.authenticate('Träger', {Sitzung: falsch, Bereiche: ['Admin']})

Wird dies vom Pass unterstützt oder muss ich es anders machen?

Hilfreichster Kommentar

@mwawrusch Ich habe eine Lösung dafür, mit der ich zufrieden bin und die gut funktioniert, was eine leicht bereinigte Version dessen ist, was Sie erwähnen.

Sie können jetzt ein drittes Erfolgsargument übergeben, das von Passport bei req.authInfo angehängt wird

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

Das info-Argument kann dann in der Middleware weiter unten in der Kette verwendet werden, um Autorisierung und Zugriffskontrolle zu implementieren.

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

Das info ist nur ein generisches JSON-Objekt, daher muss sich die App auf Konventionen für das, was bereitgestellt wird, festlegen. Ich hoffe, dass sich dies auch für die Implementierung von Allzweck-Autorisierungs-Middleware als nützlich erweisen wird.

Die Funktion fällt mit der Entwicklung von OAuthorize und OAuth2orize zusammen , die davon Gebrauch machen. Sie können verwendet werden, um OAuth 1.0- bzw. 2.0-Server zu implementieren. Ich glaube, ich habe eine Quora-Seite zu diesem Thema gesehen, die Sie erstellt haben. Es wäre großartig, wenn diese hinzugefügt würden!

Senden Sie mir wie immer Ihr Feedback. Prost!

Alle 3 Kommentare

Nur der Vollständigkeit halber mache ich jetzt Folgendes: Ich füge einfach die Bereiche zum Benutzerobjekt hinzu und verwende req.user ... und zu einem späteren Zeitpunkt überprüfe ich, ob die spezifische Route und der Bereich übereinstimmen.

@mwawrusch Ich habe eine Lösung dafür, mit der ich zufrieden bin und die gut funktioniert, was eine leicht bereinigte Version dessen ist, was Sie erwähnen.

Sie können jetzt ein drittes Erfolgsargument übergeben, das von Passport bei req.authInfo angehängt wird

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

Das info-Argument kann dann in der Middleware weiter unten in der Kette verwendet werden, um Autorisierung und Zugriffskontrolle zu implementieren.

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

Das info ist nur ein generisches JSON-Objekt, daher muss sich die App auf Konventionen für das, was bereitgestellt wird, festlegen. Ich hoffe, dass sich dies auch für die Implementierung von Allzweck-Autorisierungs-Middleware als nützlich erweisen wird.

Die Funktion fällt mit der Entwicklung von OAuthorize und OAuth2orize zusammen , die davon Gebrauch machen. Sie können verwendet werden, um OAuth 1.0- bzw. 2.0-Server zu implementieren. Ich glaube, ich habe eine Quora-Seite zu diesem Thema gesehen, die Sie erstellt haben. Es wäre großartig, wenn diese hinzugefügt würden!

Senden Sie mir wie immer Ihr Feedback. Prost!

Sehr Schön. Danke.

Am Freitag, 13. Juli 2012 um 8:36 Uhr, Jared Hanson <
[email protected]

schrieb:

@mwawrusch Ich habe eine Lösung dafür, mit der ich zufrieden bin und die funktioniert
Nun, das ist eine leicht aufgeräumte Version dessen, was Sie erwähnen.

Sie können dem Erfolg jetzt ein drittes Argument übergeben, und das ist mit angehängt
Reisepass bei 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' });
    });
  }
));

Das Info-Argument kann dann in der Middleware weiter unten in der Kette verwendet werden
Autorisierung und Zugriffskontrolle implementieren.

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

Das info ist nur ein generisches JSON-Objekt, daher muss sich die App begleichen
auf Konventionen für das, was geliefert wird. Ich hoffe, dass sich dies beweisen wird
nützlich für die Implementierung von allgemeiner Autorisierungsmiddleware.

Die Funktion fällt mit der Entwicklung von OAuthorize und OAuth2orize zusammen , die davon Gebrauch machen. Sie
kann verwendet werden, um OAuth 1.0- bzw. 2.0-Server zu implementieren. Ich denke
Ich habe eine Quora-Seite zu diesem Thema gesehen, die Sie erstellt haben. Es wäre großartig
Holen Sie sich diese dazu!

Senden Sie mir wie immer Ihr Feedback. Prost!


Antworten Sie direkt auf diese E-Mail oder sehen Sie sie auf GitHub an:

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

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen