💡 개요
오늘은 JWT 토큰의 한 부분인 페이로드의 종류에 대해 정리해 보자.
🛠️ PayLoad(페이로드)
페이로드는 JWT 토큰의 두 번째 영역으로, 토큰에 담을 실제 정보를 포함한다.
이 정보는 클레임(Claim)이라는 형태로 표현되며, 클레임은 크게 세 가지로 나뉜다.
⚙️ 등록된 클레임
등록된 클레임은 JWT 사양(RFC 7519)에 따라 표준적으로 정의된 필드로, 서버와 클라이언트가 공통으로 이해할 수 있도록 널리 사용된다.
클레임 | 설명 |
iss | Issuer: 토큰을 발급한 주체 (예: 인증 서버의 도메인) |
sub | Subject: 토큰의 주제, 주로 사용자 ID 등 식별자 |
aud | Audience: 토큰의 대상, 즉 이 토큰을 사용할 시스템 또는 서비스 |
exp | Expiration Time: 토큰의 만료 시간 (Unix timestamp) |
nbf | Not Before: 이 시간 이전에는 토큰이 유효하지 않음 |
iat | Issued At: 토큰이 발급된 시간 |
jti | JWT ID: 토큰의 고유 식별자 (주로 중복 방지나 토큰 식별용) |
위 표를 보다시피 등록된 클레임에는 많은 정보를 포함할 수 있는데, 굳이 위 정보를 모두 포함할 필요는 없다.
⚙️ 공개 클레임
공개 클레임은 여러 개발자들이 정의하고 사용할 수 있는 클레임이다.
보통 IANA와 같이 표준으로 정의된 클레임 명을 사용한다.
예를 들어 email, name 같은 사용자 정보가 이에 해당한다.
만약 하나의 공개 클레임에 겹치는 클레임 명이 존재할 경우, 충돌을 피하기 위해 URI 네임스페이스를 사용한다.
{
"https://mycompany.com/email": "admin@mycompany.com",
"https://partner.com/email": "customer@partner.com"
}
위 클레임을 보면 각 email이 어느 도메인에서 생성되었는지 알 수 있다.
⚙️ 비공개 클레임
비공개 클레임은 발급자와 수신자에게만 의미가 있는 클레임이다.
JWT 표준에 정의되지 않은 클레임을 정의할 때 사용한다.
memberId, memberLevel 등과 같이 팀 내부의 개발자들끼리 협의하에 커스텀하여 사용 가능하다.
웬만하면 공개 클레임에서 사용할 수 있는 표준 클레임과 겹치지 않도록 주의해야 한다.
😎 세 가지 클레임이 적용된 예시
{
"iss": "https://auth.myservice.com", // 등록된 클레임
"sub": "user_12345", // 등록된 클레임
"aud": "myservice-client", // 등록된 클레임
"exp": 1714962292, // 등록된 클레임
"iat": 1714958692, // 등록된 클레임
"email": "member@example.com", // 공개 클레임
"name": "홍길동", // 공개 클레임
"https://myservice.com/role": "admin", // URI 네임스페이스를 사용한 공개 클레임
"memberId": 98765, // 비공개 클레임
"memberLevel": "premium" // 비공개 클레임
}
🤔 참고
'개발 일기' 카테고리의 다른 글
[개발 일기] 2025.05.06 - WebRTC 연결 (0) | 2025.05.06 |
---|---|
[개발 일기] 2025.05.05 - 비밀번호 암호화 (Feat : BCryptPasswordEncoder) (1) | 2025.05.05 |
[개발 일기] 2025.05.03 - JWT 말고 인증에 사용할 만한 기술 (0) | 2025.05.03 |
[개발 일기] 2025.05.02 -GraphQL, gRPC (2) | 2025.05.02 |
[개발 일기] 2025.05.01 - ws vs wss (Feat: Nginx) (0) | 2025.05.01 |