Passport 인증과 함께 JWT를 사용하는 방법 알아보기
16196 단어 authenticationpassportjwtjavascript
소개
오늘날 거의 모든 웹 및 모바일 앱에는 인증 기능이 있습니다. 대부분은 Facebook, Google 또는 이메일/비밀번호와 같은 다양한 로그인 방법을 한 번에 제공합니다.
Passport은 구현하기 쉬운 다양한 요청 인증 전략을 제공하는 Node.js 미들웨어입니다. 기본적으로 세션에 사용자 개체를 저장합니다.
JSON Web Tokens은 서버의 세션에 사용자를 저장하고 쿠키를 생성하는 대신 로그인한 사용자를 식별하는 데 도움이 되는 요청에서 암호화된 토큰을 할당하고 전달하는 방식으로 작동하는 인증 표준입니다. Node.js module을 포함하여 다양한 통합이 있습니다.
다음은 이 두 모듈을 함께 사용하고 익스프레스 기반 백엔드에서 인증을 설정하는 방법에 대한 자습서입니다. 다행스럽게도 Passport는 세션 대신 요청에 사용자 개체를 저장하는 옵션을 허용합니다.
이 자습서에서는 간단한 로컬(이메일/비밀번호) 인증을 사용하지만 다른 전략과 함께 사용할 수도 있습니다.
먼저 종속성을 설치하겠습니다.
npm install --save passport passport-local passport-jwt jsonwebtoken
이제 모든 것이 작동하는 방식은 다음과 같습니다.
이제 이 로직을 구현해 보겠습니다.
로그인
다음과 같이 app.js 옆에 있는 별도의 파일에서 로컬 패스포트 전략을 설정하고 사용했다고 가정합니다.
//passport.js
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
passport.use(new LocalStrategy({
usernameField: 'email',
passwordField: 'password'
},
function (email, password, cb) {
//this one is typically a DB call. Assume that the returned user object is pre-formatted and ready for storing in JWT
return UserModel.findOne({email, password})
.then(user => {
if (!user) {
return cb(null, false, {message: 'Incorrect email or password.'});
}
return cb(null, user, {message: 'Logged In Successfully'});
})
.catch(err => cb(err));
}
));
app.js에서 이 파일을 요구해야 합니다.
//app.js
const express = require('express');
...
require('./passport');
const app = express();
...
const auth = require('./routes/auth');
app.use('/auth', auth);
이제 auth.js 경로 파일에서 로그인 작업을 구현합니다. 여기에서 로컬 전략으로 여권 인증 기능을 호출하고 오류를 처리하고 사용자를 로그인합니다.
//routes/auth.js
const express = require('express');
const router = express.Router();
const jwt = require('jsonwebtoken');
const passport = require("passport”);
/* POST login. */
router.post('/login', function (req, res, next) {
passport.authenticate('local', {session: false}, (err, user, info) => {
if (err || !user) {
return res.status(400).json({
message: 'Something is not right',
user : user
});
}
req.login(user, {session: false}, (err) => {
if (err) {
res.send(err);
}
// generate a signed son web token with the contents of user object and return it in the response
const token = jwt.sign(user, 'your_jwt_secret');
return res.json({user, token});
});
})(req, res);
});
세션에서 사용자를 저장하지 않도록 {session: false}를 패스포트 옵션에 전달합니다. 또한 사용자 개체를 기반으로 서명된 JSON 웹 토큰을 만들어 클라이언트에 반환합니다. 물론 사용자를 식별하는 데 도움이 되는 한 토큰을 만드는 데 사용할 개체를 선택할 수 있습니다. 아이디어는 인증된 모든 요청에서 데이터베이스에서 사용자를 검색하지 않고도 사용할 수 있는 최소한의 정보를 저장하는 것입니다.
보호된 요청
이제 인증이 필요한 일부 특수 경로에 액세스하기 위해 유효한 토큰이 있는 요청만 허용하는 미들웨어를 만듭니다./유저 프로필. 이를 위해 passport-jwt 전략을 사용합니다. passport.js 파일에 추가하겠습니다.
//passport.js
...
const passportJWT = require("passport-jwt");
const JWTStrategy = passportJWT.Strategy;
const ExtractJWT = passportJWT.ExtractJwt;
...
passport.use(new JWTStrategy({
jwtFromRequest: ExtractJWT.fromAuthHeaderAsBearerToken(),
secretOrKey : 'your_jwt_secret'
},
function (jwtPayload, cb) {
//find the user in db if needed. This functionality may be omitted if you store everything you'll need in JWT payload.
return UserModel.findOneById(jwtPayload.id)
.then(user => {
return cb(null, user);
})
.catch(err => {
return cb(err);
});
}
));
클라이언트가 Authorization Header의 JWT 토큰을 전달자 토큰으로 보낸다고 가정합니다. 요청에서 토큰을 가져오는 Passport JWT 전략supports many other ways. 필요에 맞는 것을 선택하세요.
이제 우리가 해야 할 일은 보호된 경로를 위해 앱에서 이 미들웨어를 사용하는 것입니다. 이 가이드에서는 다음과 같은 간단한 사용자 경로를 준비합니다.
//routes/user.js
const express = require('express');
const router = express.Router();
/* GET users listing. */
router.get('/', function(req, res, next) {
res.send('respond with a resource');
});
/* GET user profile. */
router.get('/profile', function(req, res, next) {
res.send(req.user);
});
module.exports = router;
그리고 아래와 같이 사용자 경로에서 여권 인증 미들웨어를 사용합니다.
//app.js
const express = require('express');
...
require('./passport');
const app = express();
...
const auth = require('./routes/auth');
const user = require('./routes/user');
app.use('/auth', auth);
app.use('/user', passport.authenticate('jwt', {session: false}), user);
그리고 그게 다야!
계속해서 몇 가지 요청을 시도하면 이제 Passport로 JSON 웹 토큰 승인이 지원됩니다 👍
Reference
이 문제에 관하여(Passport 인증과 함께 JWT를 사용하는 방법 알아보기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/_arpy/learn-using-jwt-with-passport-authentication-22n8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)