JWT 키
JWT 키 (JWK, RFC 7517)
JWK(JSON Web Key)는 암호화 키를 JSON 객체로 표현하는 표준이에요. 키 종류는 kty(key type) 파라미터로 구분하고, 알고리즘·용도·키 ID 같은 메타데이터를 함께 담을 수 있어요. JWT 서명·암호화에 쓰는 공개키와 개인키, 대칭 키를 교환할 때 표준 포맷으로 써요.
시스템 간에 키를 주고받을 때 라이브러리마다 제각각인 포맷 대신 JWK를 쓰면 호환성이 좋아져요. 특히 공개키 버전은 JWKS(JSON Web Key Set) 문서로 묶어서 /jwks 같은 엔드포인트로 공개하기도 해요.
JWK 구조
JWK는 단일 키 하나를 나타내는 JSON 객체예요.
{
"kty": "RSA",
"kid": "key-2026",
"use": "sig",
"alg": "RS256",
"n": "0vx7agoebGcQSuuPiLJXZptN9nndrQmbXEps2aiQBb-H7qzX",
"e": "AQAB"
}
주요 파라미터는 이래요.
kty— 키 유형.RSA,EC,oct(대칭),OKP(Ed25519 등)가 있어요. 필수.use— 키 용도.sig(서명) 또는enc(암호화).alg— 이 키로 쓸 알고리즘(예:RS256,ES256).kid— 키 ID. 토큰의 헤더에서 참조해서 여러 키 중 알맞은 걸 고를 때 써요.n,e— RSA 공개키의 modulus와 exponent.crv,x,y— 타원곡선 키의 곡선과 점 좌표.k—oct(대칭) 키의 base64url 인코딩된 비밀 값.
JWK Set (JWKS)
여러 키를 모아서 제공하는 문서가 JWKS예요.
{
"keys": [
{ "kty": "RSA", "kid": "key-1", "use": "sig", "n": "...", "e": "AQAB" },
{ "kty": "EC", "kid": "key-2", "use": "sig", "crv": "P-256", "x": "...", "y": "..." }
]
}
인증 서버나 ID 공급자는 자주 이 JWKS 엔드포인트를 열어두고, 리소스 서버나 클라이언트는 kid로 해당 키를 찾아 JWT 서명을 검증해요.
키 포맷 변환
JWK은 PEM·DER 같은 기존 포맷과 상호 변환이 가능해요. 대부분의 암호화 라이브러리(OpenSSL, Node.js jose, PyJWT+cryptography 등)가 JWK을 지원해서, 기존 인증서 기반 키를 JWKS로 노출하기 쉽도록 도와줘요.