JSON Web Token 약자로 모바일이나 웹의 사용자 인증을 위해
사용하는 암호화된 토큰을 의미.
JWT 정보를 request에 담아 사용자의 정보 열람, 수정 등을
수행할 수 있게 한다.
{
"sub": "1234567890", // 등록된 플레임
"name": "John Doe", // 비공개 플레임
"iat": 1516239022 // 등록된 플레임
}
각 요청시 서명이 확인되고 헤더 또는 페이로드의 정보가
클라이언트에 의해 변경된 경우 서명이 무효화된다.
토큰 기반 시스템은 stateless하다.
유저의 인정 정보를 서버나 세션에 담아두지 않기 때문에
인정정보를 서버에 담아둠으로써 발생하는 많은 문제점들이 해소된다.
무상태(stateless), 확장성이 있다.
기존 서버에 세션을 저장하는 방식에서 서버 여러대를 사용하여
요청을 분산하였다면
어떤 유저가 로그인했을 때 그 유저는 처음 로그인한 서버에만
요청을 내보내도록 설정해야한다.
하지만 토큰을 사용했고, 토큰 값만 알고 있다면 어떤 서버로
요청이 들어가던 상관이 없다는 거다.
= 세션스토리지가 필요없다
보안성 쿠키를 전달하지 않아도 되므로 쿠키를 사용함으로써
발생하는 취약점이 사라진다.
여러 플랫폼 및 도메인 어플리케이션 규모가 커지면
여러 디바이스를 호환 시키고 더 많은 종류의 서비스를 제공한다.
이 때, 토큰을 사용한다면 그 어떤 디바이스나 도메인에서도
토큰만 유효하다면 요청이 정상적으로 처리된다.
서버는 클라이언트에서 요청을 받을때 마다, 해당 토큰이 유효하고 인증됐는지 검증을 하고, 사용자가 요청한 작업에 권한이 있는지
확인하여 작업을 처리한다.
서버에서는 사용자에 대한 세션을 유지 할 필요가 없다.
즉 사용자가 로그인되어있는지 안되어있는지 신경 쓸 필요가 없고,
사용자가 요청을 했을때 토큰만 확인하면 되므로 세션 관리가 필요 없어서 서버 자원과 비용을 절감할 수 있다.
Reference
JWT란 무엇인가
Oauth없이 JWT만 보내지 못하는 이유
JWT