์๋ ํ์ธ์ Jared,
์ฌ๊ถ์ด ์ค์ฝํ๋ฅผ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋จธ๋ฆฌ๋ฅผ ๊ฐ๋ ๋ฐ ์ด๋ ค์์ ๊ฒช์ต๋๋ค. ๋ด ์๋๋ฆฌ์ค๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
ํ ํฐ ์ ์ฅ์๊ฐ ์์ผ๋ฉฐ ๊ฐ ํ ํฐ์๋ ๋ฒ์๊ฐ ์ฐ๊ฒฐ๋์ด ์์ต๋๋ค. ๊ด๋ฆฌ์ ๋ฒ์์ ํ ํฐ๋ง ์ก์ธ์คํ ์ ์๋ ์ผ๋ถ ๊ฒฝ๋ก์ ์ผ๋ฐ ํ ํฐ ์ก์ธ์ค๊ฐ ํ์ํ ๊ฒฝ๋ก๊ฐ ์์ต๋๋ค. ๋ด ์ฑ์์ ๋ค์๊ณผ ๊ฐ์ด ํ ๊ฒ์ ๋๋ค.
app.use('/v1', ์ฌ๊ถ.์ธ์ฆ('bearer', { ์ธ์ : false }):
์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ๋ฅผ ํฌ์ฐฉํ๊ณ ๊ด๋ฆฌ์ ๊ถํ์ด ํ์ํ ํน์ ๊ฒฝ๋ก์ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด ๊ฒฝ๋ก์ ๋ฏธ๋ค์จ์ด์ ๋ค์๊ณผ ๊ฐ์ด ์ถ๊ฐํฉ๋๋ค.
.. ์ฌ๊ถ.authenticate('bearer', { ์ธ์
: 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' });
});
}
));
๊ทธ๋ฐ ๋ค์ info ์ธ์๋ ๊ถํ ๋ถ์ฌ ๋ฐ ์ก์ธ์ค ์ ์ด๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ์ฒด์ธ ์๋์ ๋ฏธ๋ค์จ์ด์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
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 ํ์ด์ง๋ฅผ ๋ณธ ๊ฒ ๊ฐ์์. ์ด๊ฒ๋ค์ด ์ถ๊ฐ๋๋ฉด ์ข์ ๊ฒ์ ๋๋ค!
์ธ์ ๋ ๊ทธ๋ ๋ฏ์ด ํผ๋๋ฐฑ์ ๋ณด๋ด์ฃผ์ธ์. ๊ฑด๋ฐฐ!
์์ฃผ ์ข์ต๋๋ค ๊ฐ์ฌ ํด์.
2012๋
7์ 13์ผ ๊ธ์์ผ ์ค์ 8์ 36๋ถ, Jared Hanson <
๋ต์ฅ@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' }); }); } ));
๊ทธ๋ฐ ๋ค์ info ์ธ์๋ ๋ฏธ๋ค์จ์ด์์ ์ฒด์ธ ์๋๋ก ๋ ๋ฉ๋ฆฌ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
๊ถํ ๋ถ์ฌ ๋ฐ ์ก์ธ์ค ์ ์ด๋ฅผ ๊ตฌํํฉ๋๋ค.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 ์ธ์๋ ๊ถํ ๋ถ์ฌ ๋ฐ ์ก์ธ์ค ์ ์ด๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ์ฒด์ธ ์๋์ ๋ฏธ๋ค์จ์ด์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
info
๋ ์ผ๋ฐ JSON ๊ฐ์ฒด์ด๋ฏ๋ก ์ฑ์ ์ ๊ณต๋ ํญ๋ชฉ์ ๋ํ ๊ท์น์ ์ ํด์ผ ํฉ๋๋ค. ์ด๊ฒ์ด ๋ฒ์ฉ ์ธ์ฆ ๋ฏธ๋ค์จ์ด๋ฅผ ๊ตฌํํ๋ ๋ฐ์๋ ์ ์ฉํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.์ด ๊ธฐ๋ฅ์ ์ด๋ฅผ ํ์ฉํ๋ OAuthorize ๋ฐ OAuth2orize ๊ฐ๋ฐ๊ณผ ์ผ์นํฉ๋๋ค. OAuth 1.0 ๋ฐ 2.0 ์๋ฒ๋ฅผ ๊ฐ๊ฐ ๊ตฌํํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋๋ ๋น์ ์ด ๋ง๋ ์ด ์ฃผ์ ์ ๋ํ Quora ํ์ด์ง๋ฅผ ๋ณธ ๊ฒ ๊ฐ์์. ์ด๊ฒ๋ค์ด ์ถ๊ฐ๋๋ฉด ์ข์ ๊ฒ์ ๋๋ค!
์ธ์ ๋ ๊ทธ๋ ๋ฏ์ด ํผ๋๋ฐฑ์ ๋ณด๋ด์ฃผ์ธ์. ๊ฑด๋ฐฐ!