Backend

[Backend] JWT

dong_seok 2024. 12. 11. 14:30
728x90
1. JWT (JSON Web Token)란?
2. 쿠키 기반 인증 vs JWT

1.  JWT (JSON Web Token)란?

JWT는 Header, Payload, Signature로 구성된 토큰 기반 인증 방식입니다. 데이터를 Base64로 인코딩하고, 세 요소를 마침표(.)로 연결하여 하나의 토큰으로 만듭니다.

 

1 ) JWT 구조

(1) Header: 서명 알고리즘과 토큰 타입 정보를 포함.

  • 예: {"alg": "HS256", "typ": "JWT"}

(2) Payload: 사용자 정보와 클레임(예: 만료 시간 exp, 사용자 ID sub) 등을 포함.

  • 예: {"sub": "user123", "exp": 1700000000}

(3) Signature: Header + Payload를 서버의 Secret Key로 서명한 값.

  • 예: HMACSHA256(Base64UrlEncode(Header) + "." + Base64UrlEncode(Payload), SecretKey)

-> 이 3가지 값들이 BAse64Url로 인코딩 되어 마침표(.)으로 연결함으로써 JWT가 구성

 

2) JWT 인증 원리

(1) 클라이언트가 서버로부터 JWT를 전달받아 저장.

(2) 클라이언트가 요청 시 JWT를 함께 전송.

(3) 서버는 전달받은 JWT의 Signature를 검증하여 토큰이 조작되지 않았음을 확인.

  • 서명 알고리즘, Payload, Secret Key를 이용해 Signature를 생성하고, 전달받은 토큰의 Signature와 비교.
  • 토큰 검증 과정에서 DB를 조회하지 않아도 되기 때문에 서버 부하를 줄일 수 있음

 

2.  쿠키 기반 인증 vs JWT

1) 쿠키 기반 인증

  1. 브라우저가 로그인을 시도하면 애플리케이션 서버는 DB를 조회해서 회원 유무 확인
  2. 회원 정보가 있다면 Session table에 어떤 사용자가 로그인했고 session id 라고 하는 임시 비밀번호를 발급
  3. 이를 서버가 다시 쿠키값으로 브라우저에게 응답
  4. 이 값은 브라우저에 저장되고 다음에 접속할때마다 서버에 저장됨.

단점

  1. 추가 조회 필요: Session ID만으로는 사용자의 세부 정보를 알 수 없어 추가적인 DB 조회가 필요.
  2. 서버 부하: 요청마다 Session Table 확인이 필요.
  3. 확장성 부족: 새로운 장치로 로그인 시 Session Table에 새로운 데이터가 추가되어 관리 부담 증가.

2) JWT

  1. 브라우저에서 로그인을 시도하면, 애플리케이션 서버는 데이터베이스를 조회하여 회원 유무를 확인
  2. 회원 정보가 존재하면, 서버는 JWT를 생성하여 브라우저로 전달
  3. 클라이언트는 전달받은 JWT를 쿠키나 로컬스토리지와 같은 저장소에 보관
  4. 클라이언트는 인증이 필요한 서비스 이용 시 저장된 JWT를 포함하여 서버에 요청
  5. 서버는 전달받은 JWT를 디코딩하여 Header, Payload, Signature 정보를 추출
  6. 서버는 Secret Key를 사용해 Header와 Payload로 새로운 Signature를 생성하고, 이를 JWT의 Signature와 비교합니다. Signature가 일치하고 JWT가 유효한 경우, 클라이언트의 요청에 필요한 응답을 반환

장점

1. 애플리케이션에 필요한 정보를 payload에 담아둘 수 있음

2. 로그인과정에서 한번만 DB에 접근하고 그 이후의 인증과정에서는 DB에 접근할 필요가 없음

-> 서버의 부담을 완화 할 수 있음

 

 

참고자료

https://www.youtube.com/watch?v=36lpDzQzVXs

 

 

 

 

 

728x90
반응형

'Backend' 카테고리의 다른 글

[Backend] Access Token & Refresh Token  (0) 2024.12.12