JWT 검증기
JSON Web Token이 유효하고 아직 만료되지 않았는지 확인하세요. 토큰과 함께 HMAC 비밀 키, PEM 공개 키, 인증서, JWK 또는 전체 JWKS를 붙여넣으면 검증기가 jose 라이브러리로 서명을 확인하고 exp 및 nbf를 현재 시각과 선택적 시계 오차 허용 범위에 비교합니다. 디코딩된 헤더 및 클레임과 함께 명확한 판정을 표시합니다. alg가 none인 토큰은 거부됩니다.
자주 묻는 질문
검증기는 무엇을 확인하나요?
제공한 키로 서명을 확인한 뒤 exp 클레임과 nbf 클레임을 현재 시각과 비교합니다. 서명이 일치하고 두 시간 검사 모두 통과해야 유효하다고 판정합니다. iss, aud, sub 같은 클레임은 페이로드에 표시되지만 예상 값과 비교하지는 않습니다.
어떤 키를 붙여넣을 수 있나요?
HS256, HS384 및 HS512의 경우 공유 비밀 키를 텍스트 또는 oct JWK로 붙여넣으세요. RSA, EC 및 EdDSA 토큰의 경우 PEM 공개 키(SPKI 또는 PKCS #1), X.509 인증서, 공개 또는 비공개 JWK, 최대 50개의 키가 포함된 JWKS, 또는 비공개 PEM 키를 붙여넣으세요. 비공개 PEM 키에서는 공개 부분만 사용됩니다.
JWKS에서 올바른 키는 어떻게 선택하나요?
토큰 헤더에 kid가 있으면 세트에서 동일한 kid를 가진 키를 사용하며, 일치하는 키가 없으면 오류에 kid가 표시됩니다. kid가 없으면 세트에 키가 정확히 하나 있어야 합니다. 이는 대부분의 서버가 jwks_uri 문서에서 키를 선택하는 방식과 같습니다.
알고리즘 옵션은 어떤 역할을 하나요?
Use the token's alg를 선택하면 알고리즘은 토큰 헤더에서 가져오지만, 키는 해당 알고리즘에 맞아야 합니다. 따라서 RSA 공개 키를 HMAC 비밀 키로 사용할 수 없습니다. 특정 알고리즘을 선택하면 토큰이 해당 알고리즘을 사용하도록 요구합니다. 서버가 예상 알고리즘을 고정할 때 사용하는 방식입니다. 그러면 다른 alg를 사용하는 토큰은 두 알고리즘 이름이 모두 표시된 채 거부됩니다.
alg가 none인 토큰은 왜 거부되나요?
alg가 none인 토큰에는 서명이 없으므로 검증할 것이 없고 누구나 작성할 수 있습니다. 이러한 토큰을 허용하는 것은 JWT 라이브러리의 잘 알려진 취약점입니다. 검증기는 이를 유효한 결과가 아닌 오류로 표시합니다.
exp, nbf 및 시계 허용 오차는 어떻게 작동하나요?
exp가 현재 시각과 같거나 이전이면 토큰은 만료된 것으로 간주되고, nbf가 현재 시각보다 늦으면 아직 유효하지 않은 것으로 간주됩니다. 0초에서 3600초 사이의 시계 허용 오차는 서버 간 시계 차이를 감안해 두 검사에 적용되는 범위를 넓힙니다. 존재하지만 숫자가 아닌 클레임이 있으면 토큰은 유효하지 않습니다.
유효하지 않은 서명은 무엇을 의미하나요?
토큰이 제공한 키로 서명되지 않았거나, 서명 후 헤더 또는 페이로드가 변경되었습니다. 일치하는 공개 키 또는 비밀 키를 정확한 문자 그대로 붙여넣었는지, 토큰을 빠짐없이 복사했는지 확인하세요. 디코딩된 헤더와 페이로드는 비교할 수 있도록 계속 표시됩니다.
어떤 알고리즘을 지원하나요?
HS256, HS384, HS512, RS256, RS384, RS512, PS256, PS384, PS512, ES256, ES384, ES512 및 Ed25519 키를 사용하는 EdDSA를 지원합니다. RSA 키는 최소 2048비트여야 합니다. 암호화된 토큰(JWE)은 복호화되지 않습니다.
토큰이나 키가 저장되나요?
아니요. 토큰과 키는 이 검증에만 메모리에서 사용되며 로그에 기록되거나 저장되지 않습니다. 공개 키는 공유해도 안전하지만, HMAC 비밀 키는 주의해서 다루고 유출이 의심되는 비밀 키는 교체하세요.
토큰과 키의 최대 크기는 얼마인가요?
토큰은 최대 65,536자, 키 필드는 최대 262,144자까지 입력할 수 있어 큰 JWKS 문서도 처리할 수 있습니다. 토큰은 점으로 구분된 세 개의 base64url 부분으로 구성되어야 하며, alg 멤버가 있는 JSON 헤더와 페이로드인 JSON 객체가 있어야 합니다.