рд╣рд╛рдп рдЬрд╛рд░реЗрдб,
рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдкрдирд╛ рд╕рд┐рд░ рд▓рдкреЗрдЯрдиреЗ рдХрд╛ рдХрдард┐рди рд╕рдордп рд╣реИ рдХрд┐ рдкрд╛рд╕рдкреЛрд░реНрдЯ рд╕реНрдХреЛрдк рд╕реЗ рдХреИрд╕реЗ рдирд┐рдкрдЯрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдореЗрд░рд╛ рдкрд░рд┐рджреГрд╢реНрдп рд╣реИ:
рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдЯреЛрдХрди рд╕реНрдЯреЛрд░ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдЯреЛрдХрди рдХреЗ рд╕рд╛рде рдПрдХ рджрд╛рдпрд░рд╛ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдорд╛рд░реНрдЧ рд╣реИрдВ рдЬреЛ рдХреЗрд╡рд▓ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рджрд╛рдпрд░реЗ рд╡рд╛рд▓реЗ рдЯреЛрдХрди рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдиреНрдп рдЬрд┐рдиреНрд╣реЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдЯреЛрдХрди рдкрд╣реБрдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдореЗрд░реЗ рдРрдк рдореЗрдВ рдореИрдВ рдРрд╕рд╛ рдХреБрдЫ рдХрд░реВрдВрдЧрд╛:
app.use ('/ v1', рдкрд╛рд╕рдкреЛрд░реНрдЯред рдкреНрд░рдорд╛рдгреАрдХрд░рдг ('рд╡рд╛рд╣рдХ', {рд╕рддреНрд░: рдЭреВрдард╛}):
рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдореИрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдорд╛рд░реНрдЧ рдХреЗ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдореЗрдВ рдЬреЛрдбрд╝реВрдВрдЧрд╛, рдЬреИрд╕реЗ
.. рдкрд╛рд╕рдкреЛрд░реНрдЯред рдкреНрд░рдорд╛рдгреАрдХрд░рдг ('рд╡рд╛рд╣рдХ', {рд╕рддреНрд░: рдЧрд▓рдд, рдХрд╛рд░реНрдпрдХреНрд╖реЗрддреНрд░: ['рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ']})
рдХреНрдпрд╛ рдпрд╣ рдкрд╛рд╕рдкреЛрд░реНрдЯ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИ рдпрд╛ рдХреНрдпрд╛ рдореБрдЭреЗ рдЗрд╕реЗ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдХрд░рдирд╛ рд╣реЛрдЧрд╛?
рдкреВрд░реНрдгрддрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрднреА рдЬреЛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдпрд╣рд╛рдВ рд╣реИ: рдореИрдВ рдмрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕реНрдХреЛрдк рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ рдФрд░ req.user рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ ... рдФрд░ рдмрд╛рдж рдХреЗ рдЪрд░рдг рдореЗрдВ рдореИрдВ рдЬрд╛рдВрдЪрддрд╛ рд╣реВрдВ рдХрд┐ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рд░реНрдЧ рдФрд░ рд╕реНрдХреЛрдк рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред
@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 рдкреЗрдЬ рджреЗрдЦрд╛ рд╣реИ рдЬреЛ рдЖрдкрдиреЗ рдмрдирд╛рдпрд╛ рд╣реИред рдЗрдиреНрд╣реЗрдВ рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛!
рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдореБрдЭреЗ рдХреЛрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рднреЗрдЬреЗрдВред рдЪреАрдпрд░реНрд╕!
рдмрд╣реБрдд рдмрдврд┐рдпрд╛ рдЖрдкрдХреЛ рдзрдиреНрдпрд╡рд╛рджред
рд╢реБрдХреНрд░рд╡рд╛рд░, 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/jarehanson/passport-http-bearer/issues/2#issuecomment -6966368
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
@mwawrusch рдореБрдЭреЗ рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдореИрдВ рдЦреБрд╢ рд╣реВрдВ рдФрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬреЛ рдХрд┐ рдЖрдк рдЬреЛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реИрдВ рдЙрд╕рдХрд╛ рдереЛрдбрд╝рд╛ рд╕рд╛рдл-рд╕реБрдерд░рд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИред
рдЕрдм рдЖрдк рд╕рдлрд▓рддрд╛ рдХреЗ рд▓рд┐рдП рддреАрд╕рд░рд╛ рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╡рд╣ рдкрд╛рд╕рдкреЛрд░реНрдЯ рджреНрд╡рд╛рд░рд╛
req.authInfo
. рдкрд░ рд╕рдВрд▓рдЧреНрди рд╣реИрд╕реВрдЪрдирд╛ рддрд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдФрд░ рдЕрднрд┐рдЧрдо рдирд┐рдпрдВрддреНрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдиреАрдЪреЗ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
info
рд╕рд┐рд░реНрдл рдПрдХ рд╕рд╛рдорд╛рдиреНрдп JSON рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдРрдк рдХреЛ рдЬреЛ рдЖрдкреВрд░реНрддрд┐ рдХреА рдЬрд╛рддреА рд╣реИ рдЙрд╕рдХреЗ рд▓рд┐рдП рд╕рдореНрдореЗрд▓рдиреЛрдВ рдкрд░ рд╕рдордЭреМрддрд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдпреЛрдЬрди рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдорд┐рдбрд▓рд╡реЗрдпрд░ рдХреЛ рднреА рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╕рд╛рдмрд┐рдд рд╣реЛрдЧрд╛редрдпрд╣ рд╕реБрд╡рд┐рдзрд╛ OAuthorize рдФрд░ OAuth2orize рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рддреА рд╣реИ, рдЬреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрд░рдорд╢рдГ OAuth 1.0 рдФрд░ 2.0 рд╕рд░реНрд╡рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдПрдХ Quora рдкреЗрдЬ рджреЗрдЦрд╛ рд╣реИ рдЬреЛ рдЖрдкрдиреЗ рдмрдирд╛рдпрд╛ рд╣реИред рдЗрдиреНрд╣реЗрдВ рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛!
рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдореБрдЭреЗ рдХреЛрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рднреЗрдЬреЗрдВред рдЪреАрдпрд░реНрд╕!