쿠키&세션&토큰

박정훈·2022년 12월 31일
0

웹 어플리케이션에서 로그인을 구현하는 방식에는 쿠키&세션을 이용하는 방식과 JWT 토큰을 이용하는 방식 이렇게 크게 두가지로 나뉜다.

쿠키&세션 방식

사용자(클라이언트)가 서버에 자원을 요청하면 서버에서 사용자를 구별할 수 있는 데이터를 기반으로 세션 아이디를 생성하고, 인증정보는 서버에 저장하고 브라우저의 쿠키에 세션 아이디를 보관하도록 한다.

이후 브라우저는 request 요청을 보낼 시 세션 아이디를 포함한 쿠키를 보내게 되고 서버에서는 쿠키의 세션 아이디를 토대로 사용자를 판별하여 로그인이 이뤄질 수 있게 된다.

JWT 토큰 방식

우선 JWT란 Json Web Token의 줄임말로 인증에 필요한 정보들을 암호화시킨 토큰을 의미한다. JWT 기반 인증은 JWT 토큰을 HTTP 헤더에 실어 서버가 클라이언트를 식별한다.

JWT의 구조는 Header, Payload, Signature로 나뉘는다.

  • Header는 alg과 typ는 각각 정보를 암호화할 해싱 알고리즘 및 토큰의 타입을 지정한다.
  • Payload는 토큰에 담을 정보를 지니고 있다. 주로 클라이언트의 고유 ID 값, 유효 기간 등이 포함되는 영역이다. key&value 형식으로 이루어진 한 쌍의 정보를 Claim이라고 한다.
  • Signature는 인코딩된 Header와 Payload를 더한 뒤 비밀키로 해싱하여 생성한다. Header와 Payload는 단순히 인코딩된 값이라 제 3자가 복호화 및 조작할 수 있지만, Signature는 서버 측에서 관리하는 비밀키가 유출되지 않는 이상 복호화할 수 없다. 따라서 Signature는 토큰의 위변조 여부를 확인하는데 사용된다.

JWT 토큰을 이용한 로그인 방식은 아래와 같다.
사용자(클라이언트)가 로그인을 요청하면 서버에서 검증 후 클라이언트의 고유 ID 등의 정보를 payload에 담고 비밀키를 이용해 암호화 하여 토큰을 발급하여 클라이언트에 전달한다. 클라이언트는 전달받은 토큰을 저장해두고, 서버에 요청할 때 마다 토큰을 요청 헤더 Authorization에 포함시켜 함께 전달한다. 서버는 토큰의 Signature를 비밀키로 복호화한 다음, 위변조 여부 및 유효 기간 등을 확인하여 유효한 토큰이라면 요청에 응답한다.

profile
즐겁게 열심히 꾸준히 더 높이

0개의 댓글