본문 바로가기

Backend/Spring | SpringBoot

[Spring Security] JWT토큰 적용하기

반응형

프로젝트 환경

spring boot : 3.2.2
spring security : 6.2.1
java : 17
database : h2

 

이어지는 다음 글 : [Spring Security] JWT토큰 사용 코드

 

[Spring Security] JWT토큰 사용 코드

이어지는 이전 글 : [Spring Security] JWT토큰 적용하기 [Spring Security] JWT토큰 적용하기 프로젝트 환경 spring boot : 3.2.2 spring security : 6.2.1 java : 17 database : h2 JWT토큰을 적용해 보려 한다. JWT토큰이란? JSON

nwblog06.tistory.com

 

JWT토큰을 적용해 보려 한다.

  1. JWT토큰이란?
    JSON Web Token (JWT)는 마이크로 서비스의 인증, 인가에 사용할 수 있는 서명된 JSON이다.
    마이크로 서비스 아키텍처 에서는 각각의 API서버들이 API클라이언트에 대한 인증과 인가 매커니즘이 필요하다.
    마이크로 서비스 아키텍처 구조상 중앙에서 상태를 유지할 방법을 적용하기 어렵고, 쿠키를 기반으로 세션을 통해 인증을 하게 되면 세션에 사용자 정보를 저장하는 등 세션 서버가 필요하고 부하가 발생 할 가능성이 있다.

  2. JWT토큰의 형태
    JWT는 세 파트로 나누어지며, 각 파트는 점로 구분하여 xxxxx.yyyyy.zzzzz 이런식으로 표현된다. 순서대로 헤더 (Header), 페이로드 (Payload), 서명 (Sinature)로 구성한다.
    Header는 토큰의 타입과 해시 암호화 알고리즘으로 구성되어 있다. 첫째는 토큰의 유형 (JWT)을 나타내고, 두 번째는 HMAC, SHA256 또는 RSA와 같은 해시 알고리즘을 나타내는 부분이다.
    Payload는 토큰에 담을 클레임(claim) 정보를 포함하고 있다. Payload 에 담는 정보의 한 ‘조각’ 을 클레임이라고 부르고, 이는 name / value 의 한 쌍으로 이뤄져있다. 토큰에는 여러개의 클레임 들을 넣을 수 있다.
    클레임의 정보는 등록된 (registered) 클레임, 공개 (public) 클레임, 비공개 (private) 클레임으로 세 종류가 있다.
    마지막으로 Signature는 secret key를 포함하여 암호화되어 있다.

  3. 인증 방식
    해시함수는 데이터의 무결성을 검증하고, 특정 해시함수와 서명 알고리즘을 통해 데이터의 인증과 무결성을 보장한다. 그리고 이 데이터를 인코딩하여 네트워크를 통해 전송하기 쉬운 형태로 변환한다.
    인코딩 방식은 JWT표준으로 Base64 URL를 사용한다. 표준 Base64 인코딩과 유사하지만 '+'와 '/' 문자를 각각 '-'와 '_'로 대체하여 URL-Safe하게 사용한다.
    해시함수와 서명 알고리즘의 경우에는 다양한 알고리즘을 사용할 수 있다.
    • HS256, HS384, HS512 (HMAC with SHA-256, SHA-384, SHA-512)
    • RS256, RS384, RS512 (RSA with SHA-256, SHA-384, SHA-512)
    • ES256, ES384, ES512 (ECDSA with SHA-256, SHA-384, SHA-512)
    • PS256, PS384, PS512 (RSA PSS with SHA-256, SHA-384, SHA-512)
  4. 동작 흐름
    1. 사용자가 id와 password를 입력하여 로그인을 시도한다.
    2. 서버는 요청을 확인하고 secret key를 통해 Access token을 발급한다.
    3. JWT 토큰을 클라이언트에 전달 한다.
    4. 클라이언트에서 API 을 요청할때  클라이언트가 Authorization header에 Access token을 담아서 보낸다.
    5. 서버는 JWT Signature를 체크하고 Payload로부터 사용자 정보를 확인해 데이터를 반환한다.
    6. 클라이언트의 로그인 정보를 서버 메모리에 저장하지 않기 때문에 토큰기반 인증 메커니즘을 제공한다.

    인증이 필요한 경로에 접근할 때 서버 측은 Authorization 헤더에 유효한 JWT 또는 존재하는지 확인한다.
    JWT에는 필요한 모든 정보를 토큰에 포함하기 때문에 데이터베이스과 같은 서버와의 커뮤니케이션 오버 헤드를 최소화 할 수 있다.
    Cross-Origin Resource Sharing (CORS)는 쿠키를 사용하지 않기 때문에 JWT를 채용 한 인증 메커니즘은 두 도메인에서 API를 제공하더라도 문제가 발생하지 않는다.
    일반적으로 JWT 토큰 기반의 인증 시스템은 위와 같은 프로세스로 이루어진다.
    처음 사용자를 등록할 때 Access token과 Refresh token이 모두 발급되어야 한다.
  5. 장,단점
    장점 단점
    - 자가포함
    - 확장성
    - 언어 및 플랫폼의 독립성
    - 보안
    - 효율적인 네트워크 사용
    - 저장 공간
    - 보안 고려사항
    - 토큰 뮤효화의 어려움
    - 만료 시간 관리

 

반응형