본문 바로가기

TIL

TIL) 토큰기반 인증 : JWT

토큰기반 인증을 쓰는 이유
- 세션기반인증 = 서버(혹은 DB)에 유저 정보를 담는 방식
-> 유저 정보를 매 번 확인하는 부담존재. 이를 클라이언트에 넘겨줄 순 없을까? 토큰을 사용하면 가능
- 클라이언트가 토큰을 갖고있으면 웹사이트 사용가능 
- 대표적 토큰기반 인증 = JWT(JSON Web Token)

 

JWT 구조
- Header + payload + signature로 구성

 

토큰기반 인증절차
- (Client -> server)로그인요청
- (server -> Client)JWT 토큰 전달
- (Client -> server)get 요청
- (server)토큰 확인
- (server -> Client)응답

 

JWT 사용방법(Javascript)
1. 라이브러리

const jwt = require('jsonwebtoken')

2. 토큰 만들기

# ACCESS_SECRET은 환경변수로 미리 정의
const token = jwt.sign({content}, process.env.ACCESS_SECRET, {option})

3. 응답에 token 전달

res.status(200).send({ data: token })

4. client 요청 시 token 확인

const authHeader = req.headers.authorization
const token = authHeader.split(' ')[1]

const data = jwt.verify(token, process.env.ACCESS_SECRET)

 

JWT 단점

  • 한번 발급된 JWT는 유효기간까지 계속 사용이 가능해서 주의해야한다.
  • 디코딩만 하면 누구나 Payload 정보를 알 수 있기에 입력 가능한 내용이 제한적이다.
  • 세션/쿠키 방식에 비해 JWT의 길이가 긴편이다. 자칫 서버의 자원낭비가 발생할 수도 있다.

 

참고

 

TIL 31. 인증과 인가 (Bcrypt, JWT)

인증과 인가의 개념에 대해 알아보고 bcrypt를 활용한 비밀번호 암호화와 JWT를 활용한 인증,인가 절차에 대해 알아보자

velog.io