[ 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 인증 시스템을 구현하기 위한 기본 구성
- JwtUtil: JWT 생성, 파싱, 검증을 담당
- JwtAuthenticationFilter: 요청에 포함된 JWT를 검증하고, 인증을 처리하는 필터
- Spring Security 설정: Spring Security 설정을 통해 인증 및 권한 처리를 하고, JWT 필터를 Spring Security의 필터 체인에 추가
기본 구성
- JwtManager 클래스:
- JWT를 생성하고, 파싱하고, 검증하는 기능을 담당합니다.
- JwtAuthenticationFilter:
- HTTP 요청에서 JWT를 추출하고, 이를 검증하여 인증을 처리하는 필터입니다. JwtManager를 사용하여 JWT를 처리합니다.
- 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 |