웹 어플리케이션에서 로그인을 구현하는 방식에는 쿠키&세션을 이용하는 방식과 JWT 토큰을 이용하는 방식 이렇게 크게 두가지로 나뉜다.
사용자(클라이언트)가 서버에 자원을 요청하면 서버에서 사용자를 구별할 수 있는 데이터를 기반으로 세션 아이디를 생성하고, 인증정보는 서버에 저장하고 브라우저의 쿠키에 세션 아이디를 보관하도록 한다.
이후 브라우저는 request 요청을 보낼 시 세션 아이디를 포함한 쿠키를 보내게 되고 서버에서는 쿠키의 세션 아이디를 토대로 사용자를 판별하여 로그인이 이뤄질 수 있게 된다.
우선 JWT란 Json Web Token의 줄임말로 인증에 필요한 정보들을 암호화시킨 토큰을 의미한다. JWT 기반 인증은 JWT 토큰을 HTTP 헤더에 실어 서버가 클라이언트를 식별한다.
JWT의 구조는 Header, Payload, Signature로 나뉘는다.
JWT 토큰을 이용한 로그인 방식은 아래와 같다.
사용자(클라이언트)가 로그인을 요청하면 서버에서 검증 후 클라이언트의 고유 ID 등의 정보를 payload에 담고 비밀키를 이용해 암호화 하여 토큰을 발급하여 클라이언트에 전달한다. 클라이언트는 전달받은 토큰을 저장해두고, 서버에 요청할 때 마다 토큰을 요청 헤더 Authorization에 포함시켜 함께 전달한다. 서버는 토큰의 Signature를 비밀키로 복호화한 다음, 위변조 여부 및 유효 기간 등을 확인하여 유효한 토큰이라면 요청에 응답한다.