데브허브 | DEVHUB | Json 웹 토큰과 JJWT 라이브러리
- JWT는 인증/인가를 위한 토큰으로, 헤더, 페이로드, 시그니처 세 부분으로 구성됩니다. 🔑
- 헤더는 토큰의 메타데이터(예: 암호화 알고리즘)를 포함하며, JSON 형식으로 Base64 인코딩됩니다. 📄
- 페이로드(클레임)는 실제 데이터(예: 사용자 ID, 역할)를 담으며, JSON 형식으로 바이트 변환 후 Base64 인코딩됩니다. 📦
- 시그니처는 헤더와 페이로드를 비밀 키로 암호화하여 생성되며, 토큰의 변조 여부를 검증하는 핵심 요소입니다. ✍️
- 토큰 검증 시, 수신자는 동일한 비밀 키와 알고리즘으로 시그니처를 재구성하여 원본 시그니처와 비교함으로써 무결성을 확인합니다. ✅
- '클레임'은 페이로드에 포함되는 JSON 형태의 데이터를 지칭하며, '표준 클레임'(예:
sub, exp, iat)과 사용자 정의 클레임(예: role)이 있습니다. 🏷️
- 'Compact'는 인코딩된 헤더, 페이로드, 시그니처를 최종 JWT 문자열로 결합하는 과정을 의미합니다. 🔗
- JJWT는 자바 진영에서 JWT 생성 및 검증에 널리 사용되는 라이브러리입니다. 🛠️
- JJWT를 사용하여 토큰을 생성할 때는
Jwts.builder()로 클레임을 설정하고 비밀 키로 서명한 후 .compact()로 최종 토큰을 만듭니다. 🏗️
- JJWT로 토큰을 검증할 때는
Jwts.parser()에 비밀 키를 설정하고 .parseClaimsJws()를 사용하여 토큰을 파싱하고 클레임을 추출합니다. 🔍
- 비밀 키는 외부에 노출되지 않도록 철저히 관리해야 하며, 토큰의 유효 기간은 짧게 설정하는 것이 보안에 유리합니다. 🔒