///////
Search
🛸

JWT란 무엇인가요? 왜 사용하게 되는 것인가요?

JWT 란?

JWT(JSON Web Token)는 인증 및 정보 교환을 위한 토큰 기반 인증 방식이다.

JWT 의 구조

JWT는 Header Payload Signature 로 이루어져 있다.
Header
토큰의 타입과 Signature 를 어떤 알고리즘으로 해싱할 것인지 지정한다.
{ "alg": "HS256", "typ": JWT }
JSON
복사
typ : 토큰의 타입을 지정
alg : 알고리즘 방식을 지정하며, 서명 및 토큰 검증에 사용
Payload
토큰에 넣을 정보가 담긴 부분이다.
Payload에 담긴 정보의 한 조각을 Claim이라 부른다.
Claim 예시 (key는 간결성을 위해 문자열 3개로 이루어져 있다.)
iss: 토큰 발급자(issuer)
sub: 토큰 제목(subject)
aud: 토큰 대상자(audience)
exp: 토큰 만료 시간(expiration), NumericDate 형식으로 되어 있어야 함 ex) 1480849147370
nbf: 토큰 활성 날짜(not before), 이 날이 지나기 전의 토큰은 활성화되지 않음
iat: 토큰 발급 시간(issued at), 토큰 발급 이후의 경과 시간을 알 수 있음
jti: JWT 토큰 식별자(JWT ID), 중복 방지를 위해 사용하며, 일회용 토큰(Access Token) 등에 사용
그 외에도, 직접 원하는 정보 key-value 형태로 넣을 수 있다.
단, 큰 용량이거나 민감한 정보를 넣으면 토큰을 탈취 당했을 때 위험하기 때문에 주의해야한다.
Signature
Signature 부분을 통해서, 해당 토큰의 정보가 다른 곳에서 생성된 것인지 확인할 수 있다.
서버에서는 토큰을 발급할 때, 제 3자는 알 수 없는 secret key를 갖고 있고, 그 key 값으로 암호화 하여 발급한다.
따라서, 외부에서 만들어진 토큰이라면 해당 key값이 아님을 알 수 있기 때문에 알 수 있다.

사용하는 이유?

1.
리소스 절약 : 사용자 정보를 토큰으로서 사용자가 보관하기 때문에, 서버 자원을 절약할 수 있다.
2.
확장성 용이 : 분산 환경에서 웹 서버는 사용자의 정보를 공유할 필요 없이, 요청을 받은 웹 서버가 토큰을 해석해서 사용자를 식별하면 된다.