웹 어플리케이션에서 인증 (Authentication) 및 정보 전달을 위해 널리 사용되는 토큰 기반 인증 방식이다. 서버와 클라이언트 간에 인증 정보를 Base64Url 방식으로 인코딩하여 전달한다.
<base64url(header)>.<base64url(payload)>.<base64url(signature)>
토큰의 타입 (JWT)과 서명 알고리즘 (HS256, RS256, etc.)을 명시한다.
alg: Algorithm. 서명에 사용된 알고리즘typ: Type. 토큰의 타입 (일반적으로 "JWT"로 고정)kid (Option): Key ID. 여러 키 중 어떤 키로 서명되었는지 식별할 때 사용사용자 ID, 권한, 만료시간 등 사용자 정보 (Claims)가 들어가는 부분이다.
iss: Issuer. 토큰 발급자sub: Subject. 토큰 주제aud: Audience. 토큰 대상자exp: Expiration. 만료 시간nbf: Not Before. 해당 시간 이전에는 유효하지 않음iat: Issued At. 토큰 발급 시간jti: JWT ID. 토큰 고유 식별자 (재사용 방지에 유용)✏️ 사용자 정의 필드는 임의로 추가할 수 있다.
✏️ JWT Payload는 인코딩일 뿐 암호화되지 않으므로, 민감한 정보는 포함하지 않는다.
Header와 Payload를 인코딩한 후 비밀 키로 서명한 값으로, 무결성 검증에 사용된다.
Spring 기반 어플리케이션에서 인증/권한을 관리하는 프레임워크이다.
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); /* 인증 정보 허용 */ } }