서버와 클라이언트 사이에서 Json을 사용해 정보를 안전하게 전송하기 위해 설계된 인증방식이다.
여러 정보가 포함될 수 있다는 점에서 인증수단으로 확장되었다.
JWT는 인증(Authentication)과 인가(Authorization)에 사용되는 것이 가장 일반적이며 주로 토큰기반 인증을 사용한다.
JSON은 상대적으로 장황하게 만들어져있는데 JWT는 어떤 특정 Hashing 알고리즘에 의해 JSON이 컨버트된 데이터이다. 이건 암호화와 다른개념.
(어떤 알고리즘으로 Hashing을 했느냐에 따라 결과물이 달라진다. 대표적으로 hs256, rs256을 주로 사용하는데 보안이 중요한게 아니라면 대부분 hs를 사용한다.)
내가 생각하는 사람이 맞는지만 알면 된다. 암구호를 예를 들자면 암구호는 군대 등 보안이 필요한 단체에서 사용하는 단어 문답에 의한 신호로서, 서로가 같은 보안조직의 구성원임을 인증하기 위해 미리 정해 놓은 문답이다. 문어와 답어로 구성되며 문답하는 개인의 이름이나 계급은 중요하지 않다. 아군인지 아닌지 식별하는것이 중요하기 때문이다.
JWT는 백엔드에서 발급해주는 토큰이고 이 백엔드는 자기가 발급한 토큰을 그대로 가져왔는지만 알아내면 된다. 이 안에 있는 정보가 옳은 정보인지 관심없고 JWT가 올바른지에만 관심이 있다는 말이다.
발급된 토큰은 Access할 때 필요한 토큰이라 해서 Access Token이라 부른다.
JWT를 생성할 때 만료시간을 설정해두면 이 JWT 내가 발급한 토큰으로 인증이 되더라도 만료시간이 지난 토큰이면 인증실패라는 로직을 짤 수 있다. 한번 로그인하면 영원히 프리패스 하는 현상을 방지하는것.
보안적 측면에서 만료시간은 필요하다. 또한 만료시간이 적을수록 보안에 유리하다. 하지만 사용자가 로그인 이후 활동을 하기도 전에 만료시간이 되어버리면 곤란하다. 때문에 여기에 대한 보완점이 Refresh Token이다.