Passport-http-bearer: ¿Cómo funcionan los alcances?

Creado en 5 mar. 2012  ·  3Comentarios  ·  Fuente: jaredhanson/passport-http-bearer

Hola Jared,

Me cuesta entender cómo el pasaporte trata con los visores. Aquí está mi escenario:

Tengo una tienda de tokens, cada token tiene un alcance adjunto. Tengo algunas rutas a las que solo pueden acceder tokens con alcance de administrador y otras que requieren acceso de token normal. En mi aplicación haría algo como esto:

app.use('/v1', pasaporte.authenticate('portador', { sesión: falso }):

para captar el caso normal y para rutas específicas que requieren derechos de administrador, agregaría algo como esto en el middleware de la ruta, como
.. pasaporte.authenticate('portador', { sesión: falso, ámbitos: ['admin']})

¿Esto está respaldado por el pasaporte o tengo que hacerlo de manera diferente?

Comentario más útil

@mwawrusch Tengo una solución para esto con la que estoy contento y funciona bien, que es una versión ligeramente limpia de lo que mencionas.

Ahora puede pasar un tercer argumento al éxito, y Passport lo adjunta en 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' });
    });
  }
));

El argumento de información se puede usar en el middleware más adelante en la cadena para implementar la autorización y el control de acceso.

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

El info es solo un objeto JSON genérico, por lo que la aplicación deberá establecer convenciones para lo que se proporciona. Espero que esto también resulte útil para implementar middleware de autorización de propósito general.

La función coincide con el desarrollo de OAuthorize y OAuth2orize , que hacen uso de ella. Se pueden usar para implementar servidores OAuth 1.0 y 2.0 respectivamente. Creo que he visto una página de Quora sobre este tema que has creado. ¡Sería genial agregar esto a eso!

Como siempre, envíame cualquier comentario. ¡Salud!

Todos 3 comentarios

Solo para completar, esto es lo que estoy haciendo ahora: simplemente agrego los alcances al objeto de usuario y uso req.user... y en una etapa posterior compruebo si la ruta específica y el alcance coinciden.

@mwawrusch Tengo una solución para esto con la que estoy contento y funciona bien, que es una versión ligeramente limpia de lo que mencionas.

Ahora puede pasar un tercer argumento al éxito, y Passport lo adjunta en 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' });
    });
  }
));

El argumento de información se puede usar en el middleware más adelante en la cadena para implementar la autorización y el control de acceso.

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

El info es solo un objeto JSON genérico, por lo que la aplicación deberá establecer convenciones para lo que se proporciona. Espero que esto también resulte útil para implementar middleware de autorización de propósito general.

La función coincide con el desarrollo de OAuthorize y OAuth2orize , que hacen uso de ella. Se pueden usar para implementar servidores OAuth 1.0 y 2.0 respectivamente. Creo que he visto una página de Quora sobre este tema que has creado. ¡Sería genial agregar esto a eso!

Como siempre, envíame cualquier comentario. ¡Salud!

Muy bonito, gracias.

El viernes 13 de julio de 2012 a las 8:36 a. m., Jared Hanson <
[email protected]

escribió:

@mwawrusch Tengo una solución para esto con la que estoy contento y está funcionando
bueno, que es una versión ligeramente limpia de lo que mencionas.

Ahora puede pasar un tercer argumento al éxito, y eso está adjunto por
Pasaporte a 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' });
    });
  }
));

El argumento de información se puede usar en el middleware más adelante en la cadena para
implementar autorización y control de acceso.

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

El info es solo un objeto JSON genérico, por lo que la aplicación deberá establecerse
en convenciones para lo que se suministra. Espero que esto demuestre
También es útil para implementar middleware de autorización de propósito general.

La función coincide con el desarrollo de OAuthorize y OAuth2orize , que hacen uso de ella. Ellos
se puede utilizar para implementar servidores OAuth 1.0 y 2.0 respectivamente. creo
He visto una página de Quora sobre este tema que has creado. Sería genial
¡Consiga estos añadidos a eso!

Como siempre, envíame cualquier comentario. ¡Salud!


Responda a este correo electrónico directamente o véalo en GitHub:

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

¿Fue útil esta página
0 / 5 - 0 calificaciones