jsonwebtoken 간단 사용법

JunSeok·2022년 6월 25일
2
post-thumbnail

로그인 기능을 만들 시, 권한검사는 필수이다.
권한검사를 하는 방법으로 여러가지가 있는데, 토큰을 사용한 권한검사가 있다.

그 중에서 제일 유명한 JWT를 사용해보려 한다.
우선 공식문서를 읽어보자.
공식 홈페이지
JWT 사용 공식문서


JWT을 복호화하면,
Header에는 알고리즘과 타입
Payload에는 데이터가 있고
SIGNATURE는 토큰을 인코딩하거나 유효성 검증을 할 때, 사용하는 고유한 코드가 들어있다.
header와 payload를 합친 문자열을 BASE64로 인코딩하고,
인코딩한 값을 Secret Key를 이용해 헤더에서 정의한 알고리즘으로 해싱을 하고, 이 값을 다시 BASE64로 인코딩하여 생성한다.

이 세 부분을 합쳐서 암호화를 한 것이 JWT라는 토큰이다.


설치

npm install jsonwebtoken

npm install @types/jsonwebtoken // ts 사용 경우

사용(sign 메소드)

JWT의 sign메소드는 토큰을 만들어주어 클라이언트에 발급해주는 메소드이다.
들어가는 인자값으로 payload와 secretOrPrivateKey가 있다.

payload는 '전송되는 데이터'라는 의미를 가지고 있다.
이 값에는 자신을 식별할 수 있게 해주는 유니크한 값이 들어가줘야 한다.
예를 들어 자신의 이름이나 id가 적절할 것
secretOrPrivateKey은 토큰 값을 더 복잡하게 만들어주는 소스라고 생각하면 좋다. 즉 식별값인 payload를 알고 있어도 secret값이 조금이라도 달라진다면 token은 완전히 다른 값이 된다.

import JWT from 'jsonwebtoken'

const payload = '식별값'
// payload는 string, buffer, object 타입의 값이 들어간다.
const secret = 'cloudoort'
const token = JWT.sign(payload, secret)
// sign함수에는 payload와 secret인자 값이 필요하다.

이렇게 로그인할 때 토큰을 발급해주고
다음에 api 요청을 받을 때, 서버에서는 토큰을 검사한 후 응답하는 구조를 만들 수 있다.


검증(verify 메소드)

verify 메소드는 발급받은 토큰이 제대로 만들어진 토큰인지 확인해주는 메소드이다.
발급받은 토큰으로 api 요청하고 응답받는 api를 만들 때 용이하다.

인자값으로 발급받은 토큰과 secret키가 들어간다.

import JWT from 'jsonwebtoken'

const secret = '시크릿키' // 여기서 secret키는 민감한 정보이므로 .env에 저장해주는 것이 좋다.
const token = '발급받은 토큰'

const verifiedToken = JWT.verify(token, secret)

verify 메소드는 token의 payload값을 리턴한다.
이후 id값이 실제로 DB에 존재하는 지 확인함으로써 적합한 유저인지 검증한 후, API응답을 해주는 구조를 설계할 수 있다.


공식문서 이용

위에서 만든 토큰을 공식문서 홈페이지에 복사해서 복호화하면 토큰의 정보를 자세히 알 수 있다.

Reference

공식 홈페이지
npm
wldus9503.log
Knowledge Logger

profile
최선을 다한다는 것은 할 수 있는 한 가장 핵심을 향한다는 것

0개의 댓글