Access Token & JWT

쿠키의 단점

  • 쿠키를 지원하는 클라이언트에서밖에 사용할 수 없음
  • 적절히 관리되지 않은 쿠키는 보안에 취약하며, 관리를 하려고 해도 CORS 대응이 복잡함

Token Based Auth

  • 토큰이란, 사용자의 자격증명(아이디, 패스워드 등)을 통해 인증이 이루어진 후, 특정 자원에 대한 자격증명으로서 대신 사용되는 인증 수단
  • 서버에 요청을 할 때마다 토큰을 요청에 직접 포함시켜서 전송 (주로 Authorization 헤더에 넣어서 전송)

Cookie vs Token

토큰 사용의 장점

  • 쿠키를 지원하지 않는 클라이언트에서도 편하게 사용할 수 있음
  • 쿠키를 사용하지 않음으로써 CORS 관련 문제를 회피할 수 있음

토큰 사용의 단점

  • 매 요청에 토큰이 포함되게 되므로 적당히 짧은 길이를 유지해야 함
  • 토큰 유출에 대한 대비책이 필요 (토큰에 유효기간을 두거나, 유출된 토큰을 강제로 무효화하는 등의 방법을 사용)
  • 쿠키와는 다르게, 클라이언트 개발자가 직접 토큰을 저장하고 관리해야 함

Web Storage

  • 브라우저에서 키-값 쌍을 저장할 수 있는 저장소
  • 쿠키에 비해 사용하기 편리하고 저장 가능한 용량도 큼(10MB 가량)
  • 브라우저 탭이 닫히면 내용이 삭제되는 sessionStorage, 브라우저 탭이 닫혀도 내용이 유지되는 localStorage가 있음

Web Storage 실습

보안 상 주의사항

  • (당연히) HTTPS를 사용해야 함
  • 토큰을 localStorage에 저장하게 되면 자바스크립트로 토큰을 탈취할 수 있게 되므로, 웹사이트에 악성 스크립트를 삽입하는 공격(XSS)에 노출되지 않도록 신경써야 함

JSON Web Token

  • 최근 널리 사용되고 있는 토큰 형식의 표준
  • 토큰 안에 JSON 형식으로 정보를 저장함
  • 보안을 위해 서명 또는 암호화를 사용할 수 있음

jwt.io

JWT 실습

Link

now App Link

참고 링크