용도와 수명이 다른 access token과 refresh token을 명시적인 claim 계약으로 구분합니다.
JWT는 claim 집합을 서명된 문자열로 전달하는 토큰 형식이며, 암호화와는 다릅니다. 검증자는 서명만 보지 않고 issuer, audience, 만료, 사용 목적까지 확인해야 합니다. access token과 refresh token은 수명과 권한이 서로 달라야 합니다.
서명은 claim 변조를 잡아내지만 내용을 숨기지는 않으므로, payload에 민감정보를 넣지 않습니다.
수명이 짧은 access token과 용도가 제한된 refresh token을 구분해, 탈취됐을 때의 피해 범위를 줄입니다.
허용 알고리즘, issuer, audience, 시간, token type을 설정으로 고정하고 빠짐없이 검증합니다.
아래 증명은 글로 된 설명이 아닙니다. 버튼을 누르면 이 서버가 지금 직접 계산합니다.
토큰 종류를 헤더의 typ과 claim 양쪽에 고정하고 서명 키 id도 함께 담습니다. 그래서 검증할 때 종류·키·발급자를 모두 확인할 수 있습니다.
표준 문서에 실린 테스트 벡터를 그대로 넣어 같은 값이 나오는지 확인합니다.
refresh 토큰을 access 토큰으로 내미는 종류 혼동, 서명 변조, 다른 발급자나 청중의 토큰, 폐기된 토큰은 모두 검증 단계에서 막힙니다.
막아야 할 입력을 실제로 넣고 거부되는지 확인합니다.
규격 원문을 먼저 실었습니다. 사례는 이 분야에서 실제로 보안이 뚫린 일을 다룬 자료입니다.
claim 구조와 검증 절차의 원문입니다.
alg 혼동, none 알고리즘처럼 실제 사고로 이어진 원인과 대응을 정리했습니다.
at+jwt 헤더 타입과 필수 claim을 정의합니다.
다음 단계
비대칭 서명 key adapter와 서비스별 revocation source를 연결해 키 교체 절차를 검증합니다.