Привет Джаред,
Мне трудно понять, как паспорт работает с прицелами. Вот мой сценарий:
У меня есть хранилище токенов, к каждому токену привязана область действия. У меня есть некоторые маршруты, к которым могут получить доступ только токены с правами администратора, и другие, которым требуется обычный доступ к токену. В своем приложении я бы сделал что-то вроде этого:
app.use('/v1',passport.authenticate('носитель', {сеанс: ложь}):
чтобы поймать обычный случай и для определенных маршрутов, требующих прав администратора, я бы добавил что-то подобное в промежуточное программное обеспечение маршрута, например
..passport.authenticate('носитель', {сеанс: false, области действия: ['admin']})
Это подтверждается паспортом или мне нужно сделать это по-другому?
Просто для полноты, вот что я делаю сейчас: я просто добавляю области к объекту пользователя и использую 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
Самый полезный комментарий
@mwawrusch У меня есть решение, которым я доволен, и оно работает хорошо, это немного подчищенная версия того, что вы упомянули.
Теперь вы можете передать третий аргумент для успеха, и он прикреплен к Passport по адресу
req.authInfo
Затем информационный аргумент можно использовать в промежуточном программном обеспечении дальше по цепочке для реализации авторизации и контроля доступа.
info
— это просто общий объект JSON, поэтому приложению необходимо будет установить соглашения о том, что предоставляется. Я надеюсь, что это окажется полезным и для реализации промежуточного программного обеспечения авторизации общего назначения.Эта функция совпадает с разработкой OAuthorize и OAuth2orize , которые ее используют. Их можно использовать для реализации серверов OAuth 1.0 и 2.0 соответственно. Кажется, я видел страницу Quora на эту тему, которую вы создали. Было бы здорово добавить их к этому!
Как всегда, присылайте мне любые отзывы. Ваше здоровье!