이번 프로젝트에서 인증로직에 JWT를 사용하기 때문에 JWT에 대해 공부해 보았다
JWT(Json Web Token) 란 Json 포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim 기반의 Web Token이다.
토큰의 헤더는 typ
와 alg
두 가지 정보로 구성된다. alg
는 Signature
를 해싱하기 위한 알고리즘을 지정하는 것이다.
토큰의 페이로드에는 토큰에서 사용할 정보의 조각들인 클레임이 담겨있다.
📌 등록된 클레임
iss: 토큰 발급자(issuer)
sub: 토큰 제목(subject)
aud: 토큰 대상자(audience)
exp: 토큰 만료 시간(expiration), NumericDate 형식으로 되어 있어야 함 ex) 1480849147370
nbf: 토큰 활성 날짜(not before), 이 날이 지나기 전의 토큰은 활성화되지 않음
iat: 토큰 발급 시간(issued at), 토큰 발급 이후의 경과 시간을 알 수 있음
jti: JWT 토큰 식별자(JWT ID), 중복 방지를 위해 사용하며, 일회용 토큰(Access Token) 등에 사용
서명은 토큰을 인코딩하거나 유효성 검증을 할 때 사용하는 고유한 암호화 코드이다. 서명은 위에서 만든 헤더와 페이로드의 값을 각각 BASE64Url로 인코딩하고, 인코딩한 값을 비밀 키를 이용해 헤더에서 정의한 알고리즘으로 해싱하고, 이 값을 다시 인코딩 하여 생성한다.
👇 이게 우리 프로젝트에서 생성한 시그니처 이다.
이 시그니처를 jwt 홈페이지에서 디코딩하면 헤더, 페이로드등의 정보들을 볼수 있다.