[SpringBoot] JWT (JSON Web Token)

김선형·2025년 9월 11일

Java

목록 보기
27/27

JWT (JSON Web Token)

웹 어플리케이션에서 인증 (Authentication) 및 정보 전달을 위해 널리 사용되는 토큰 기반 인증 방식이다. 서버와 클라이언트 간에 인증 정보를 Base64Url 방식으로 인코딩하여 전달한다.

구조

<base64url(header)>.<base64url(payload)>.<base64url(signature)>

토큰의 타입 (JWT)과 서명 알고리즘 (HS256, RS256, etc.)을 명시한다.

필드

  • alg: Algorithm. 서명에 사용된 알고리즘
  • typ: Type. 토큰의 타입 (일반적으로 "JWT"로 고정)
  • kid (Option): Key ID. 여러 키 중 어떤 키로 서명되었는지 식별할 때 사용

Payload

사용자 ID, 권한, 만료시간 등 사용자 정보 (Claims)가 들어가는 부분이다.

필드

  • iss: Issuer. 토큰 발급자
  • sub: Subject. 토큰 주제
  • aud: Audience. 토큰 대상자
  • exp: Expiration. 만료 시간
  • nbf: Not Before. 해당 시간 이전에는 유효하지 않음
  • iat: Issued At. 토큰 발급 시간
  • jti: JWT ID. 토큰 고유 식별자 (재사용 방지에 유용)

✏️ 사용자 정의 필드는 임의로 추가할 수 있다.

✏️ JWT Payload는 인코딩일 뿐 암호화되지 않으므로, 민감한 정보는 포함하지 않는다.

Signature

Header와 Payload를 인코딩한 후 비밀 키로 서명한 값으로, 무결성 검증에 사용된다.

Spring Security

Spring 기반 어플리케이션에서 인증/권한을 관리하는 프레임워크이다.

설정 범위

  • 인증 (Authentication): 사용자가 누구인지 확인한다.
  • 인가 (Authorization): 특정 리소스에 접근 가능한지 판단한다.
  • 세션/토큰 관리: JWT, 세션 쿠키 등 인증 상태 유지 방식을 설정한다.
  • CORS 정책: 다른 도메인에서의 요청 허용 여부를 설정한다.
  • CSRF 보호: 주로 웹 브라우저 환경에서 사용된다.
  • 예외 처리: 인증/인가 실패 시 응답 형식을 지정한다.
  • HTTP 요청 보안 설정: http.authorizeHttpRequests() 등으로 경로별 권한을 제어한다.

✏️ CORS (Cross-Origin Resource Sharing)?
웹 브라우저는 보안 상의 이유로 다른 출처의 리소스 요청을 기본적으로 차단한다. CORS는 서버가 "내 리소스를 특정 외부 도메인에서 접근해도 된다"고 명시해주는 방식이다. 클라이언트 측의 보안 제약이며, 서버 보안 정책은 아니다.

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")     /* 모든 경로 허용 */
                .allowedOrigins("*")   /* 모든 도메인 허용 */
                .allowedMethods("*")   /* 모든 HTTP 메서드 허용 */
                .allowedHeaders("*")   /* 모든 헤더 허용 */
                .allowCredentials(true); /* 인증 정보 허용 */
    }
}
profile
선형의 비선형적 기록 🐜

0개의 댓글