JWT 구조와 클레임
헤더, 페이로드 및 서명을 이해합니다.
JWT 구조와 클레임은(는) CoddyKit의 무료 C# Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 C# Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. C# Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
JWT란 무엇인가요
JSON 웹 토큰(JWT)은 두 당사자 간에 클레임을 안전하게 전송하는 데 사용하는 간결하고 URL에 안전한 토큰 형식입니다. ASP.NET Core에서는 상태 비저장 API를 인증하는 가장 일반적인 방법입니다.
JWT는 점으로 연결된 세 개의 Base64Url 인코딩 부분으로 이루어진 문자열일 뿐입니다. header.payload.signature
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0Iiwicm9sZSI6ImFkbWluIn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c헤더
헤더는 토큰의 서명 방식을 설명합니다. 헤더는 첫 번째 세그먼트로 Base64Url 인코딩되는 작은 JSON 객체입니다.
alg는 서명 알고리즘(예: HS256, RS256)을 나타내며, typ는 거의 항상 JWT입니다.
{
"alg": "HS256",
"typ": "JWT"
}페이로드
페이로드는 사용자에 대한 설명과 토큰의 메타데이터인 클레임을 전달합니다. 페이로드는 두 번째 세그먼트입니다.
중요: 페이로드는 인코딩만 되며 암호화되지는 않습니다. 누구나 디코딩할 수 있으므로 여기에 비밀 정보를 넣지 마십시오.
{
"sub": "1234",
"name": "Alice",
"role": "admin",
"exp": 1735689600
}서명
서명은 토큰이 변조되지 않았음을 보장합니다. 서버는 인코딩된 헤더, 인코딩된 페이로드, 비밀 키를 사용하여 서명을 계산합니다.
누군가 페이로드의 문자 하나라도 변경하면 서명이 더 이상 일치하지 않아 검증에 실패합니다.
HMACSHA256(
base64UrlEncode(header) + "." + base64UrlEncode(payload),
secretKey
)등록된 클레임
일부 클레임 이름은 JWT 사양(RFC 7519)에 따라 표준화되어 있습니다. 이러한 이름에는 세 글자로 된 짧은 키가 사용됩니다.
iss- 발급자sub- 주체(사용자 ID)aud- 대상exp- 만료 시간(Unix 초)nbf- 이 시간 이전에는 유효하지 않음iat- 발급 시각
{
"iss": "https://api.myapp.com",
"aud": "myapp-clients",
"sub": "42",
"exp": 1735689600,
"iat": 1735686000
}사용자 지정 클레임
등록된 집합 외에도 애플리케이션에 필요한 사용자 지정 클레임을 역할, 권한, 테넌트 ID, 이메일 등의 형태로 추가할 수 있습니다.
모든 클레임은 모든 요청마다 전송되므로 페이로드를 작게 유지하십시오.
{
"sub": "42",
"email": "alice@myapp.com",
"role": "admin",
"tenant_id": "acme",
"permissions": ["orders:read", "orders:write"]
}ASP.NET Core의 claims
.NET에서 claims는 System.Security.Claims.Claim 형식으로 모델링됩니다. 각 클레임은 형식 / 값 쌍입니다.
JWT가 검증되면 ASP.NET Core는 페이로드의 각 항목을 사용자의 ClaimsPrincipal에 있는 Claim으로 변환합니다.
var claims = new List<Claim>
{
new Claim(ClaimTypes.NameIdentifier, "42"),
new Claim(ClaimTypes.Name, "Alice"),
new Claim(ClaimTypes.Role, "admin"),
new Claim("tenant_id", "acme")
};ClaimsPrincipal과 ClaimsIdentity
인증된 사용자는 ClaimsPrincipal로 표현되며, 이는 하나 이상의 ClaimsIdentity 개체를 감싸고 있고 각 개체는 claims 집합을 보유합니다.
컨트롤러에서는 User를 통해 이 개체에 접근합니다.
// Inside a controller action
var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
bool isAdmin = User.IsInRole("admin");
string? tenant = User.FindFirst("tenant_id")?.Value;Claim 형식 매핑
기본적으로 JWT handler는 짧은 JWT key를 긴 URI 스타일의 클레임 형식으로 매핑합니다(예를 들어 sub는 ClaimTypes.NameIdentifier가 됩니다).
원래의 짧은 이름을 유지하려면 앱 시작 시 수신 매핑을 한 번 비활성화하십시오.
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
// Now User.FindFirst("sub") returns the raw 'sub' claim세션 쿠키를 그냥 사용하면 안 되나요?
JWT는 자체 완결형입니다. 따라서 서버는 데이터베이스 조회나 서버 측 세션 저장소 없이 signing key만 사용해 이를 검증할 수 있습니다.
이 특성 덕분에 수평 확장된 API와 마이크로서비스에 적합하며, 어느 노드에서나 동일한 token을 검증할 수 있습니다.
// Client sends the token on every request:
// Authorization: Bearer eyJhbGciOiJIUzI1Ni...절충안: 폐기
JWT는 자체 완결형이고 만료될 때까지 신뢰되므로 exp 시각 전에 하나를 쉽게 폐기할 수 없습니다.
일반적인 완화책은 access token의 수명을 짧게 설정하고 refresh token과 함께 사용하는 것입니다(이 과정은 이 강좌의 뒤에서 다룹니다).
// Short-lived access token
exp = iat + 15 * 60; // 15 minutes빠른 확인
JWT 구조에 대한 이해도를 확인해 보십시오.
복습
JWT의 구조와 ASP.NET Core에서 claims가 작동하는 방식을 배웠습니다.
- JWT는
header.payload.signature이며, 각 부분은 Base64Url로 인코딩됩니다. - 페이로드에는 등록된 및 사용자 지정 claims가 들어 있으며, 암호화되지는 않고 인코딩됩니다.
- 서명은 비밀 또는 key 쌍을 사용해 무결성을 보장합니다.
- .NET은 claims를
ClaimsPrincipal로 변환하며,User를 통해 읽을 수 있습니다.
다음으로 ASP.NET Core에서 이러한 token을 검증하도록 구성합니다.
자주 묻는 질문
“JWT 구조와 클레임” 강의는 무료인가요?
네 — “JWT 구조와 클레임” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 C# Academy 강의 전체를 잠금 해제할 수 있습니다. C# Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“JWT 구조와 클레임”에서 뭘 배우나요?
헤더, 페이로드 및 서명을 이해합니다. 브라우저에서 직접 실행하는 실습 코드로 C# Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
C# Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 C# Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“JWT 구조와 클레임” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 C# Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 C# Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- JWT 구조와 클레임
- JWT 전달자 인증 구성
- 토큰 발급
- 새로 고침 토큰과 만료