Java

JWT 정리

dong99 2024. 4. 29. 17:28

오늘은 JWT에 대해서 정리를 해보았습니다 

 

 

들어가기에 앞서 JWT의 장점과 단점에 대하여 이야기 해봅시다.

 

장점 :

Stateless Token 으로 서버가 인증 작업을 수행하지 않는다.

 

단점 :

Stateless Token 으로 서버가 인증 작업을 수행하지 않는다 서버가 인증 토큰에 대한 제어권을 잃어, 관리할 방법이 없음.
=> 로직이 없어 여러명의 사용자가 api 요청을 했을 때, 서버를 거치지 않아 실행 시간이 빨라지고 서버에 부하가 없다.

 

JWT의 동작 프로세스

(1) 최초 호출
클라이언트에서 서버로 최초 호출이 발생하는 경우 Header 내에 토큰의 존재 여부를 체크한다.

  • 토큰이 존재하지 않을 경우 '로그인' 페이지로 리다이렉션 시켜 로그인 후 토큰을 발급 받는다.
  • 토큰이 존재하는 경우 토큰의 만료 시간을 확인한다.
  • 토큰이 만료되었을 경우 재발급을 위해 '로그인' 페이지로 리다이렉트 시켜 로그인 후 토큰을 재발급 받는다.
  • 토큰이 유효한 경우 토큰 내의 정보를 확인하여 가져온다.

(2) 이후 호출
클라이언트에서 서버로 이후 호출이 발경하는 경우, 토큰의 만료 시간을 확인한다.

  • 토큰이 만료된 경우 로그인 페이지로 리다이렉션 시켜 로그인 후 토큰을 발급받는다.
  • 토큰이 만료되지 않은 경우 정상적인 프로세스를 진행한다.

aaaaaa.bbbbbb.cccccc
header.payload.signature
JWT는 .을 기준으로 3파트로 나누어지며 순서대로 헤더 (Header), 페이로드 (Payload), 서명 (Sinature)로 구성합니다.

  1. 사용자는 id(or email) 과 password를 입력하고 서버로 요청을 보냅니다.
  2. 서버는 db에서 회원을 조회하고 등록된 사용자인지 확인 합니다.
  3. 등록된 사용자라면 서버는 토큰을 생성하고 프론트로 토큰과 함께 응답을 보냅니다.
  4. 응답이 성공적으로 왔다면 로그인(인증)이 성공적으로 이루어 진 것이고 이후 요청에 token을 함께보냅니다.
  5. 서버는 로그인 이후의 요청에 함께 실려온 토큰을 검증하는 과정을 검증이 성공적으로 끝났다면 권한이 있는 사용자라고 생각하고 요청된 데이터를 응답해 줍니다. (인가)

여기서 발생한 AccessToken을 활용하여 인증 정보를 받을 수 있지만 도중에 탈취당할 경우 모든 정보가 노출되기 때문에

AccessToken의 유효시간을 짧게 설정하고 RefreshToken의 유효기간을 길게 설정하여 토큰 만료시 RefreshToken을 통해

검증 후 AccessToken을 재발행 하는 식으로 만들어주면 보안을 신경쓸수 있다고 합니다.

 

이를 활용하여 로그인 로직을 작성해보고 추후에 코드와 함께 정리를 한번더 해보자합니다.

'Java' 카테고리의 다른 글

JVM이란  (0) 2024.06.13
스프링부트 JPA Repository  (0) 2024.04.18
Spring, Spring-Boot 차이점  (0) 2024.04.08
MultipartFile 다중 파일 업로드  (0) 2024.03.29
mvc1 , mvc2 차이점  (0) 2024.03.17