JWT란 JsonWepToken의 약자로 유저의 인증을 위해 사용되는 암호화된 토큰을 의미한다.
JWT는 암호화된 토큰으로 복호화를 한다면 토큰이 담고있는 정보를 확인 할 수 있다.
JWT는 세가지 파트로 나누어 지는데 header, payload, signature로 나누어진다.
이 파트들은 .
으로 구분하여 표현된다.
세가지 파트는 모두 다른 정보를 담고있다.
토큰의 타입과 해시 암호화 알고리즘으로 구성되었다.
토큰에 정보들은 여기에 담겨있다.
payload에 담은 정보의 한 부분들을 클레임이라고 부르고, 이는 key/value 형태로 담겨져 있다.
서명(signature)은 토큰이 만들어질 때 각각 고유하게 발행이 된다.
토큰을 이용해 요청을 할 때 이 서명을 확인해서 조작 된 토큰인지 구별하고 조작 된 토큰이면 요청이 무시된다.
인가 또는 인증을 해야 할 때는 서버에서 유저들의 정보를 저장하고 있어야 가능했다.
이는 트래픽이 많아 질 수록 용량이 많아지기 때문에 효율적이지 않았다.
하지만 토큰을 사용하면 서버에서 정보를 저장하고 있지 않아도 토큰을 복호화하고 사용하면 되기에 서버에 부하가 덜 해진다.
이를 stateless하다고 한다.
서버가 상태를 가지고 있지 않다는 의미이다.
서버는 상태가 있다면 스케일을 늘리는게 어려워지기 때문에 상태를 가지고 있지 않은 것이 좋다.
이러한 이유들로 토큰을 사용하기 시작한 것이다.
하지만 이런 JWT에도 단점이 존재하다.
JWT는 기본적으로 payload에 대한 정보를 암호화 하지 않는다.
단순히 인코딩만 하기 때문에 중간에 패킷을 가로채거나 기타 방법으로 토큰을 가지고 간다면 디코딩을 통해서 데이터를 볼 수가 있다.
그래서 암호화를 진행하던가 중요한 데이터를 payload에 담지 말아야 한다.
JWT는 회원 인증에 가장 흔하게 사용하는 방법이다.
사용자가 로그인을 하면 서버에서 사용자의 정보를 기반으로 토큰을 발급해준다.
사용자는 서버에 요청을 할 때마다 이 토큰을 포함하여 요청을 하게 되고 서버에서는 토큰에 유효성을 확인 한 후에 요청에 대한 결과를 주는 것이다.
이렇게 되면 서버에서는 사용자에 대한 정보를 저장해 놓을 필요 없이 토큰만 확인 하면 된다.
참고: JWT란 무엇인가
힘내세요 진성님 !