
Node.js를 위한 인증 미들웨어
로그인과 같은 인증 로직을 아주 Fun Cool Sexy하게 처리할 수 있도록 도와주는 도구이다.
Passport의 가장 중요한 특징은 전략을 사용한다.
로그인을 하는 방식은 매우 다양하다.
ID와 비밀번호를 사용할 수도 있고, 구글, 네이버 같은 소셜 계정으로 로그인할 수도 있다.
Passport는 이러한 각각의 인증 방식을 전략이라는 이름의 독립적인 모듈로 분리한다.
passport-local 전략 사용passport-jwt 전략 사용passport-google-oauth20 전략 사용req.login(), req.logout(), req.isAuthenticated()와 같은 헬퍼 함수들을 제공하여 로그인 상태 및 세션 관리를 편리하게 해준다.실제로 어떻게 동작하는지 ID/비밀번호 기반의 passport-local 전략을 예로 들어본다.
로그인 요청: 사용자가 아이디와 비밀번호를 입력하고, 서버에 요청을 보낸다.
Passport 미들웨어 실행: 서버의 로그인 라우터는 바로 요청을 처리하지 않고, Passport 미들웨어에게 처리를 위임한다.
app.post('/login', passport.authenticate('local'), (req, res) => {
// 인증 성공 시 이 함수가 실행됨
res.send('로그인 성공!');
});
passport.authenticate('local') 이 실행되면, Passport는 내가 미리 설정해 둔 passport-local 전략을 찾아 실행한다.검증 결과 전달
done(null, user) 함수를 호출해 Passport에게 성공했다는 사실과 함께 사용자 정보를 전달done(null, false, { message: '비밀번호가 틀렸습니다.' })처럼 호출하여 실패했음을 알림후처리
passport.authenticate()는 next()를 호출하여 다음 미들웨어(라우터의 콜백 함수)로 제어권을 넘긴다.Passport의 세션 관리 기능을 보면 JWT가 필요 없는 것처럼 느껴질 수 있다.
그러나 둘은 경쟁 관계가 아니라, 각자의 역할을 수행하며 서로를 보완하는 파트너 관계에 가깝다.
Passport는 이 신분증의 종류를 가리지 않는다.
세션 쿠키라는 구식 신분증을 쓸 수도 있고, JWT라는 최신 디지털 신분증을 쓸 수도 있는 유연한 경비원이다.
이 방식은 서버가 사용자의 로그인 상태를 기억해야 한다.
passport-local이 이 DB와 대조하여 확인이 방식은 서버가 사용자의 상태를 기억할 필요가 없다.
passport-local이 이 DB와 대조하여 확인Authorization 헤더에 담아 전송passport-jwt 전략을 사용따라서 다음과 같이 역할을 분담하여 함께 사용하면 Passport의 편리한 구조와 JWT의 확장성 및 유연성이라는 장점을 동시에 잡는다.
passport-local 전략으로 검증passport-jwt 전략으로 검증하여 처리