Passport-http-bearer: Как работают прицелы?

Созданный на 5 мар. 2012  ·  3Комментарии  ·  Источник: jaredhanson/passport-http-bearer

Привет Джаред,

Мне трудно понять, как паспорт работает с прицелами. Вот мой сценарий:

У меня есть хранилище токенов, к каждому токену привязана область действия. У меня есть некоторые маршруты, к которым могут получить доступ только токены с правами администратора, и другие, которым требуется обычный доступ к токену. В своем приложении я бы сделал что-то вроде этого:

app.use('/v1',passport.authenticate('носитель', {сеанс: ложь}):

чтобы поймать обычный случай и для определенных маршрутов, требующих прав администратора, я бы добавил что-то подобное в промежуточное программное обеспечение маршрута, например
..passport.authenticate('носитель', {сеанс: false, области действия: ['admin']})

Это подтверждается паспортом или мне нужно сделать это по-другому?

Самый полезный комментарий

@mwawrusch У меня есть решение, которым я доволен, и оно работает хорошо, это немного подчищенная версия того, что вы упомянули.

Теперь вы можете передать третий аргумент для успеха, и он прикреплен к 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' });
    });
  }
));

Затем информационный аргумент можно использовать в промежуточном программном обеспечении дальше по цепочке для реализации авторизации и контроля доступа.

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 , которые ее используют. Их можно использовать для реализации серверов OAuth 1.0 и 2.0 соответственно. Кажется, я видел страницу Quora на эту тему, которую вы создали. Было бы здорово добавить их к этому!

Как всегда, присылайте мне любые отзывы. Ваше здоровье!

Все 3 Комментарий

Просто для полноты, вот что я делаю сейчас: я просто добавляю области к объекту пользователя и использую req.user... и на более позднем этапе я проверяю, совпадают ли конкретный маршрут и область.

@mwawrusch У меня есть решение, которым я доволен, и оно работает хорошо, это немного подчищенная версия того, что вы упомянули.

Теперь вы можете передать третий аргумент для успеха, и он прикреплен к 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' });
    });
  }
));

Затем информационный аргумент можно использовать в промежуточном программном обеспечении дальше по цепочке для реализации авторизации и контроля доступа.

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 , которые ее используют. Их можно использовать для реализации серверов OAuth 1.0 и 2.0 соответственно. Кажется, я видел страницу Quora на эту тему, которую вы создали. Было бы здорово добавить их к этому!

Как всегда, присылайте мне любые отзывы. Ваше здоровье!

Очень мило спасибо.

В пятницу, 13 июля 2012 г., в 8:36, Джаред Хэнсон <
ответ@reply.github.com

написал:

@mwawrusch У меня есть решение, которым я доволен, и оно работает
ну, это немного подчищенная версия того, что вы упомянули.

Теперь вы можете передать третий аргумент для успеха, и он прикреплен
Паспорт на 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' });
    });
  }
));

Затем информационный аргумент можно использовать в промежуточном программном обеспечении дальше по цепочке для
осуществлять авторизацию и контроль доступа.

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 , которые ее используют. Они
может использоваться для реализации серверов OAuth 1.0 и 2.0 соответственно. я думаю
Я видел страницу Quora на эту тему, которую вы создали. было бы здорово
добавьте их к этому!

Как всегда, присылайте мне любые отзывы. Ваше здоровье!


Ответьте на это письмо напрямую или просмотрите его на GitHub:

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

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

carera picture carera  ·  4Комментарии

AaronAcerboni picture AaronAcerboni  ·  3Комментарии

andrewchch picture andrewchch  ·  3Комментарии

ghost picture ghost  ·  3Комментарии

thalesfsp picture thalesfsp  ·  3Комментарии