JWT는 .으로 구분되는 Header, Payload, Signature의 3가지 문자열로 되어있습니다.
- Header
Header는 토큰의 타입과 해싱 알고리즘이라는 두가지 정보를 담고 있습니다{"alg":"HS256","typ":"JWT"}
보통 해싱 알고리즘은
HS256
을 사용하지만HS512
을 이용해 토큰을 더 길게 만들수 있습니다.
- Payload
Payload에는 토큰에 담을 정보가 들어가며, 담는 정보의 한 조각은 name/value의 한 쌍으로 이루어진 Claim이라고 부른다. Claim은 Registered, Public, Private의 세 분류로 나뉘어져 있다. Registered Claim은 토큰 발급자, 토큰 제목, 토큰 만료시간, 토큰 발급시간 등 토큰에 대한 정보를 담기 위해 이미 이름이 정해진 Claim 입니다.- Signature
JWT의 마지막 부분은 서명으로, Header의 인코딩값과 Payload의 인코딩값을 합친 후 주어진 비밀키로 해싱하여 생성합니다. 시그니처를 통해 토큰이 변조되었는지 확인.
https://jwt.io/ 에서 토큰으로 정보들을 모두 확인할 수 있다.
따라서 중요한 정보들은 담으면 안되고 사용자구분정도의 데이터만 담아서
간단한 구분정도는 DB조회까지가지않고 서버단에서 처리할 수 있다.
시그니처의 비밀키가 노출되게되면 토큰의 위조가 가능해지므로 절대 노출해선 안된다.