Token Based Authentication

wonkeunC·2021년 7월 13일
0
post-thumbnail

토큰 기반 인증

Json Web Token

동작 방식

  1. 유저의 인증 성공 시 유저의 식별자와 권한을 기록한 데이터를 JWT 형태로 인코딩 하여 토큰 발급한다.

  2. 유저는 Protected Route에 접근할 시 발급받은 JWT를 Authorization 헤더에 포함시켜 요청한다.

  3. 서버는 유저가 제출한 JWT의 무결성 및 만료 시각을 확인한 후 유저를 인가한다.

장점

  • 세션 기반 인증 방식과 달리 서버측 부하를 낮출 수 있다.
  • 별도의 인증 서버나 DB가 필요하지 않다.

단점

  • JWT에 인코딩된 정보는 발행 당시의 상태를 반영하기 때문에, 실시가 갱신된 DB 상태를 반영할 수 없다.
    (토큰이 발행된 후, 회원 정보가 변동될 시 토큰이 가리키는 정보와 실제 DB정보가 상이하므로 혼란을 야기할 수 있다.)
  • 토큰 자체가 탈취될 경우 해당 토큰을 강제로 만료시키기 어렵다.

커스텀 토큰 사용

동작 방식

  1. DB에 토큰을 저장하는 테이블을 유지한다. 이 테이블은 토큰 소유자의 정보와 token을 담는다.

  2. 유저의 인증 성공 시 Token DB를 생성하거나 (최초 가입) 업데이트를 하고 access_token 과 refresh_token에 생성한 후 발급한다.

  3. 유저는 Protected Route에 접근 시 access_token을 Authorization 헤더에 포함시켜 요청한다.

  4. 서버는 유저가 제출한 access_token을 받아 Token DB를 통해 토큰의 유효성 검사 후 유저 정보와 권한을 확인하여 유저를 인가한다.


장점
  • 토큰 자체에 인증 정보를 담지 않기 때문에 토큰에 매핑된 유저 정보는 항상 DB의 최신 갱신 정보를 가리킨다.
  • 토큰이 탈취되었을 경우 DB에서 토큰 자체를 만료시킬 수 있다.
  • JWT에 비해 토큰의 양이 간소하다.

단점

  • JWT와 달리 따로 토큰 정보를 담는 테이블이 필요하다.

토큰의 저장 장소

LocalStorage

장점

  • 사용하기 간편하다

단점

  • 브라우저에서 특정 LocalStorage에 접근하는 것을 막을 수 없기 때문에 서드파티 JavaScript Code에 의한 XSS 공격에 취약하다.

장점

  • httpOnly, secure 옵션을 통해 특정 쿠키가 JavaScript 코드에 의해 접근 되는 것을 막을 수 있어 LocalStorage 방식에 비해 XSS 공격에 안전하다.
  • sameSite 옵션을 통해 CSRF 공격을 막을 수 있다.
  • 서버로의 HTTP Request에 자동으로 포함된다.

단점

  • 사이즈 상한이 있다.
  • 사용자가 쿠키 사용을 불허했을 경우 사용이 불가하다.
profile
개발자로 일어서는 일기

0개의 댓글