본문 바로가기
3.1SpringBoot/3.1.2 묘공단 SpirngBoot3

[묘공단/spring] 9장 JWT로 로그인/로그아웃 구현하기- 개념

by Dohi._. 2023. 11. 9.

포스팅 목차  (책의 목차와 다릅니다 개인적으로 공부한 내용입니다)

9장

  9-1. 토큰 기반 인증?

  9-2. JWT

 

 

 

9-1. 토큰 기반 인증? 

사용자가 서버에 접근할 때 이 사용자가 인증된 사용자인지 서버에서 확인하는 방법은 다양합니다.

8장의 스프링 시큐리티에서는 기본적으로 세션 기반 인증을 제공하고 있었습니다.

사용자마다 사용자의 정보를 담은 세션을 생성하고 저장해서 인증을 하는 방식을 세션 기반 인증이라고 하는데

토큰 기반 인증은 무슨 차이가 있을 까 알아보려고 합니다.

일단 토큰은 서버에서 클라이언트를 구분하기 위한 유일한 값이며 서버가 생성하여 클라이언트에게 제공합니다.

클라이언트는 필요한 요청을 토큰과 같이 보내 신청합니다. 서버는 요청을 처리하면서 토큰을 보고 유효한 사용자인지 확인하는 방식인 셈입니다.

해당 토큰 기반 인증의 큰 특징은 무상태성, 확장성, 무결성입니다 

간단하게 설명하자면

  • 무상태성 : 서버가 토큰을 저장안하고 클라이언트가 저장. 즉, 서버는 인증 정보를 저장, 유지하지 않아도 됨
  • 확장성 : 서버가 상태 관리(사용자 인증 상태)를 하지 않아도 되므로 서버 확장에 용이. 
  • 무결성 : 토큰을 발급한 이후에 변경하는 행위는 할 수 없음. 토큰을 한글자라도 변경시 유효하지 않은 토큰으로 인식
지나가는 추가상식
토큰 방식은 HAMC(hash-based message authentication)기법이라고 부름

 

9-2. JWT

JWT는 토큰 기반 인증에서 주로 많이 사용하는 토큰입니다. 인증을 할때는 HTTP요청 헤더중에 Authorization 키값에 Bearer+ JWT 토큰값을 넣어서 보내야하는데 JWT는 무슨 구조로 이루어져 있는지 살펴보겠습니다.

JWT는 헤더.내용.서명으로 . 을 기준으로 나눠져 있습니다.

각각 담고 있는 정보는 아래와 같습니다

  • 헤더(header) : 토큰의 타입과 해싱 알고리즘을 지정하는 정보
  • 내용( payload) : 토큰과 관련된 정보. 즉, 토큰에 넣을 정보
  • 서명(signture) : 해당 토큰의 조작,변경의 여부 확인하는 용도

 

토큰 유효기간..?

만약 토큰 자체가 노출되어서 복제를 당했다면 누군가가 평생 제 토큰으로 인증하고 다닐 수도 있겠죠

해당 문제를 해결하기 위해 리프레시 토큰이라는 개념이 있습니다.

액세스 토큰(인증을 위한 토큰)이 유효기간이 설정이 너무 길다면 탈취당하면 문제고 너무 짧으면 사용자는 인증을 위한 토큰 발급에 피로도가 많이 소요될 것입니다.

리프레시 토큰은 액세스 토큰의 유효기간을 짧게 하여 보안성을 올리며 리프레시 토큰으로 액세스 토큰을 새로 발급하기 위해 인증을 대신합니다.

따라서 소비자는 리프레시 토큰으로 액세스 토큰을 발급을 빠르게 피로도 적게 할 수 있고 

탈취를 당하더라도 액세스 토큰 자체는 유효기간이 짧으므로 사용할 수 없는 토큰이 되어버리기 때문에 안전해 진다.

 


이 글은 골든래빗 《스프링 부트 3 백엔드 개발자 되기 - 자바 편》의 9장 써머리입니다.

 

728x90

댓글