JSON Web Token이란?
- Json 객체를 사용하여 둘 이상의 데이터와 정보를 전송하는 독립적인 방법
- Json 웹 토큰은 각 JWT가 디지털 서명될 수 있기 때문에 신뢰할 수 있다. 클라이언트에서 json 객체가 변경되었는지에 대해 서버가 알 수 있음.
- JWT는 기본, 다이제스트와 같은 인증 방식이 아니라 각 요청에 로그인할 필요 없이 클라이언트와 서버가 관계를 유지 가능하도록 하는 인증 방식
- 사용자가 로그인
- 디코딩 시 클라이언트와 사용자에 대한 정보를 표시하는 json 웹 토큰 반환
- 요청이 동일한 클라이언트에서 올 때마다 성공적으로 인증이 완료되면 클라이언트는 json 웹 토큰을 내뱉고 서버는 각 요청마다 토큰의 유효성을 검사
JSON Web Token 구조
- 비슷한 구조를 가지고 있다.
- Json 웹 토큰은 세개의 개별 부분으로 생성되는데, 헤더와 payload, 서명이 포함된다.
- 이 부분들은 특정 클라이언트에 대한 고유 문자가 된다.
- JWT가 변경되면 서버는 변경된 JWT에 대한 정보를 가져올 수 있다.
- 잘못된 정보의 JWT를 보내게 되면 서버에서는 이를 제지하게 되는데, 이는 JWT 서명은 고유하고 이에 대한 정보는 변경이 저장되지 않은 경우에는 이전의 정보가 옳다고 믿기 때문이다.
- 그렇기 때문에 JWT는 인증을 요하는데에 아주 중요한 정보가 되며, 사용자가 올바른 정보를 가지고 서버에 접근하는지 확인할 수 있다.
- 같은 서비스를 사용하는 API인 경우에는 같은 JWT를 공유할 수 있다.
- JWT 헤더는 일반적으로 서명 알고리즘과 토큰 유형의 부분으로 구성되고 있다.
- JWT 헤더는 Base64를 사용하여 인코딩 되며, 첫 부분을 생성하게 된다.
JWT Payload
- Payload는 웹 토큰의 두 번째 부분
- JWT Payload는 사용자의 실 데이터 및 추가 정보로 구성된다.
- 클레임이 포함되며 클레임은 등록, 공개, 비공개로 세 가지가 구성되어 있다.
- 등록은 필수 사항은 아니다. 하지만 여기에는 sub과 exp가 포함되는데
- ES : 발급자를 의미, JWT 발행 주체를 식별한다
- Sub : 주제를 나타내며 주제에 대한 설명을 보유 (로컬이나 전역적으로 고유)
- Exp : JWT가 만료되는 만료 시간을 나타내며 현재 날짜가 토큰의 만료 날짜 이전시간인지 확인해야 한다. 토큰이 만료되지 않으면 JWT를 가진 사람은 계속해서 사용이 가능하다.
- JWT Payload도 Base 64를 사용하여 인코딩 되고, 헤더 다음으로 발생한다
JWT Signature
- JWT 서명은 헤더의 알고리즘을 사용하여 인코딩된 헤더와 페이로드와 같은 정보를 해시 처리하여 생성된다.
- 서명은 서버 어딘가에 저장되는지, 클라이언트가 액세스 할 수 없는 뒤편에 생성된다.