JWT
는 JSON Web Token
의 약자로 전자 서명된 URL-safe JSON입니다.
토큰은 URL로 이용할 수 있는 문자로만 구성(URL-safe
)되어 있습니다.
JWT
는 속성 정보 (Claim)를 JSON
데이터 구조로 표현한 토큰으로 RFC7519 표준
입니다.
서버와 클라이언트 간 정보를 주고 받을 때 Http 리퀘스트 헤더
에 JSON 토큰
을 넣은 후 서버는 별도의 인증 과정없이 헤더에 포함되어 있는 JWT 정보를 통해 인증합니다.
HMAC 알고리즘
을 사용하여 비밀키
또는 RSA
를 이용한 Public Key/ Private Key 쌍
으로 서명할 수 있습니다.
JWT 의 주요한 이점은 사용자 인증에 필요한 모든 정보는 토큰 자체에 포함하기 때문에 별도의 인증 저장소가 필요없다
는 것입니다.
분산 마이크로 서비스 환경에서 중앙 집중식 인증 서버와 데이터베이스에 의존하지 않는 쉬운 인증 및 인가 방법
을 제공합니다.
개별 마이크로 서비스에는 토큰 검증과 검증에 필요한 비밀 키를 처리하기위한 미들웨어가 필요합니다. 검증은 서명 및 클레임과 같은 몇 가지 매개 변수를 검사하는 것과 토큰이 만료되는 경우로 구성됩니다.
토큰이 올바르게 서명되었는지 확인하는 것은 CPU
사이클을 필요로하며 IO
또는 네트워크 액세스
가 필요하지 않고
최신 웹 서버 하드웨어에서 확장하기가 쉽습니다.
JSON 웹 토큰의 사용을 권장하는 몇 가지 이유는 다음과 같다.
수평 스케일
이 용이디버깅 및 관리
가 용이낮음
REST 서비스
로 제공 가능JWT
JWT
를 사용하는 가장 흔한 시나리오
입니다. 사용자가 로그인을 하면, 서버는 사용자의 정보를 기반으로한 토큰을 발급
합니다.
그 후, 사용자가 서버에 요청을 할 때 마다 JWT를 포함하여 전달합니다. 서버는 클라이언트에서 요청을 받을때 마다, 해당 토큰이 유효하고 인증됐는지 검증
을 하고, 사용자가 요청한 작업에 권한이 있는지 확인하여 작업을 처리합니다.
서버에서는 사용자에 대한 세션을 유지 할 필요가 없습니다. 즉 사용자가 로그인되어있는지 안되어있는지 신경 쓸 필요가 없고
, 사용자가 요청을 했을때 토큰만 확인하면 되므로 세션 관리가 필요 없어서
서버 자원과 비용을 절감할 수 있습니다.
JWT
는 두 개체 사이에서 안정성있게 정보를 교환
하기에 좋은 방법입니다.
그 이유는, 정보가 서명이 되어있기 때문에
정보를 보낸이가 바뀌진 않았는지, 또 정보가 도중에 조작되지는 않았는지 검증할 수 있습니다.