본문 바로가기

언어/spring

J

 [ JWT ]


1. 헤더
2. 페이로드


 = Claims
   - 등록된 클레임 (표준)
     : iss (발행자) , sub (주제) , aud (대상자) , exp (만료시간)
   - 공개 클레임
     : uri 형식 권장
   - 비공개 클레임
   (페이로드 예시 : 
    {
       "sub": "1234567890",
       "name": "John Doe",
       "admin": true
     }
     -> Claims 통해 각 페이로드 값 sub, name, admin 등에 접근가능
   // JWT 토큰에서 Claims 추출
Claims claims = parseClaims(token);

// 클레임에서 데이터 추출
String subject = claims.getSubject(); // "sub" 클레임 추출
String name = claims.get("name", String.class); // "name" 클레임 추

3. 서명

 

 

민감한 정보인증 정보헤더에 넣는 것이 일반적이고, 일반적인 데이터는 **본문(Body)**에 전달하는 방식이 선호됩니다. 그러나, 보안 측면에서 가장 중요한 점은 어디에 데이터를 전달하는지보다는 어떻게 데이터를 암호화하고 보호하는지

 

 

1. 민감한 정보 (예: 인증 토큰, API 키 등)

 

 

 

JWT 인증 시스템을 구현하기 위한 기본 구성

  1. JwtUtil: JWT 생성, 파싱, 검증을 담당
  2. JwtAuthenticationFilter: 요청에 포함된 JWT를 검증하고, 인증을 처리하는 필터
  3. Spring Security 설정: Spring Security 설정을 통해 인증 및 권한 처리를 하고, JWT 필터를 Spring Security의 필터 체인에 추가

 

기본 구성

  1. JwtManager 클래스:
    • JWT를 생성하고, 파싱하고, 검증하는 기능을 담당합니다.
  2. JwtAuthenticationFilter:
    • HTTP 요청에서 JWT를 추출하고, 이를 검증하여 인증을 처리하는 필터입니다. JwtManager를 사용하여 JWT를 처리합니다.
  3. Spring Security 설정:
    • JWT 필터를 Spring Security의 필터 체인에 추가하고, 인증 및 권한 처리를 설정합니다.

 

JWT에 포함된 Claims 예시 (인코딩된 형태)

{
  "sub": "john.doe",              // 사용자의 username
  "email": "john.doe@example.com", // 사용자의 이메일
  "role": "USER",                 // 사용자의 역할

jwt 샘플.pdf
0.10MB
jwt 샘플.pdf
0.10MB


  "registrationDate": "2024-11-12T10:00:00Z", // 가입 날짜 (ISO 8601 형식)
  "iat": 1626342244,              // 발행 시간 (Unix timestamp)
  "exp": 1626345844               // 만료 시간 (Unix timestamp)
}

'언어 > spring' 카테고리의 다른 글

JDBC  (0) 2025.04.07
JSP + Servlet , Servlet -> Springboot [Springboot 등장배경]  (0) 2025.03.31
Entity - 2개의 DTO  (0) 2024.12.15