JWT
존맛탱의 약..
아니..
JSON Web Token의 약자다.
전자 서명 된 URL-safe의 JSON을 말한다
이전 포스팅에서 언급한 쿠키와 세션...
이 두가지는 다음과 같은 단점을 가지고 있다.
쿠키와 세션의 단점
- session storage의 문제가 발생하면 인증 체계가 무너져 이전에 인증된 유저 또한 인증이 불가능해진다.
- stateful 하기 때문에 http의 장점을 발휘하지 못하고 scale out에 걸림돌이 생긴다.
- session storage가 필수적으로 존재해야 하기 때문에 이를 사용하기 위한 비용이 든다.
- 세션 ID가 탈취되었을 때, 대처는 가능하지만...탈취자가 작정하고 클라이언트인척 위장했을 때는 보안의 약점이 생길 수 있다.
-사용자가 많아질수록 메모리를 많이 차지한다- 매번 요청시 세션저장소를 조회해야한다는 단점이 있다.
이 중 가장 큰 단점은 요청을 진행할때마다 세션 저장소에 세션 ID를 조회하는 작업을 통해서
DB접근 로직이 한번 더 수행되어야 한다는 것
말 그대로 인증에 필요한 정보들을 Token에 담아 암호화시켜 사용하는 토큰이다
기본적인 인증 구조는 쿠키와 크게 다르지는 않지만, 강조되는 점은 서명된 토큰이라는 점이다.
공개 키와 개인 키를 쌍으로 사용하여 토큰에 서명할 경우,
개인 키를 보유한 서버가 서명된 토큰을 정상적인 토큰인지 확인할 수 있다는 것이다.
이러한 구조 때문에 인증 정보를 담아 안전하게 인증을 시도하게끔 전달할 수 있는 것이다.
각 요소는 .
으로 구분되어있으며 구성요소는
Header.Payload.Signature
Header 예시
{
"typ": "JWT",
"alg": "HS256"
}
type : 토큰의 타입을 지정한다.
alg : Signature Hashing 알고리즘을 지정한다. 해싱 알고리즘으로는 보통 HMAC-SHA256 혹은 RSA가 사용된다.
Payload 예시
{
"iss": "dnjscksdn98.com",
"exp": "1485270000000",
"https://dnjscksdn98.com/jwt_claims/is_admin": true,
"userId": "dnjscksdn98",
"username": "alex"
}
JWT 토큰 예시
전자 서명은 JSON의 변조를 체크할 수 있게 되어있다.
JWT는 속성 정보(Claim)를 JSON 데이터 구조로 표현한 토큰으로 RFC7519 표준으로 지정되어있다.
JWT는 서버와 클라이언트 간 정보를 주고 받을 때 Http 리퀘스트 헤더에 JSON 토큰을 넣은 후 서버는 별도의 인증 과정없이 헤더에 포함되어 있는 JWT 정보를 통해 인증을 진행한다.
이때 사용되는 JSON 데이터를 URL-Safe 하도록 URL에 포함할 수 있는 문자만으로 구성한다.
JWT는 HMAC 알고리즘을 사용하여 비밀키 또는 RSA를 이용한 Public Key/ Private Key 쌍으로 서명할 수 있습니다.
Reference
[JWT] JSON Web Token 소개 및 구조
JWT(Json Web Token) 알아가기
JWT ( JSON WEB TOKEN ) 이란?