본문 바로가기

언어(JS,TS)/JavaScript

JavaScript [정보 : Passport.js, JWT ]

오늘은 멘티 멘토를 진행하였는데 JWT를 사용 한것으로 말이 나와서 요즘에는 Passport.js라는 것도 사용한다는 말을 들어서 문득 궁금해져서 찾아보았다.

 

먼저 passport와 jwt이 두가지가 무엇인지부터 알아보겠습니다.

JWT란?

JWT(JSON Web Token)은 클라이언트와 서버 혹은 서비스간의 통신시 정보를 JSON객체를 통해 안전하게 전송하고 권한(Authorization)을 위해 사용하는 토큰이다.

그렇다면 JWT를 언제 사용해야 할까?

  1. 권한(Authorization): 사용자가 로그인 하게되면 서버는 사용자에게 JWT를 발급해주고 사용자는 이 JWT를 사용해 해당 토큰으로 허용되는 서버의 서비스에 접근할 수 있다.
  2. 정보 교환: JWT는 정보를 주고 받는데도 유용하게 사용할 수 있다. 예를 들어 공개키, 개인키 쌍을 사용해 JWT에 서명할 수 있으므로 발신자가 자신이 말하는 사람인지 확인할 수 있다. 또한 Header와 Payload를 사용해 서명이 계산되므로 정보가 변조되지 않았는지도 확인할 수 있다.

- 저도 이번에 프로젝트를 사용할때 인증으로서도 사용하였지만 필요한 유저 정보를 JWT에 저장해서 사용하여  Client에서 추가적인 유저정보를 보낼 필요 없이 작업할수 있도록 하여서 좋았던 기억이 있습니다.

 

JWT의 구조

해당 사진은 jwt.io 사이트로 JWT 토큰을 생성한 모습입니다. 

 

JWT는 다음과 같이 3개의 부분으로 나누어져 있고 각 부분은 점(.)으로 구분되어 있습니다.

  1. Header
    : 토큰 유형과 토큰을 검증하는데 필요한 서명 알고리즘으로 구성
  2. Payload
    : 토큰에 저장할 데이터들로 구성
      위의 예시는 id와 user_id, 그리고 유저의 nickname으로 구성했다.
  3. Signature
    : Header와 Payload를 서명한 값으로 구성
      서명할 때 헤더에 정의한 알고리즘과 사용자가의 비밀키를 이용해 서명하는데 만약 특정 공격자가 토큰을 탈취해 내용을 위변조 하더    라도 서명한 값과 비교하기 때문에 데이터가 변조되었는지 확인할 수 있다.

passport.js란?

passport는 여권이라는 이름과 같이 서버에서 사용자를 인증하기 위해 사용하는 Node.js용 미들웨어입니다.

passport는 다양한 인증 메커니즘(session, jwt 등)을 각 모듈로 패키지화 해 제공하고 있으며 편리하게 인증을 구현할 수 있습니다.

설치

express가 설치 되어있지 않다면 설치후

$npm i express

  passport와 jwt에 필요한 모듈을 설치한다.

$npm i passport passport-local passport-jwt jwt

각 모듈은 다음과 같은 역할을 합니다.

  • passport
    : passport의 핵심 기능
  • passport-local
    : passport의 인증 기능을 직접 구현할 때 사용
  • passport-jwt
    : jwt를 사용한 passport 인증
  • jwt
    : jwt를 생성하는데 사용 (복호화도 가능)

 

 

즉 인증 과정을 좀더 간편화 하는 것 같은 효과를 가지고 있는것 같습니다

 

나중에 로그인 인증 과정을 해봐야겠다.