JWT 인증방식

이름·2023년 7월 10일

JWT ( Json Web Token )란?

: 인증에 필요한 정보를 암호화시킨 토큰을 의미

특징

  1. 인증받은 사용자에게 토큰을 발급해주고,
    서버에 요청을 할 때 HTTP 헤더에 토큰을 함께 보내 인증받은 사용자인지 확인한다.

  2. 서버 기반 인증 시스템과 달리 사용자의 인증 정보를 서버에 저장하지 않고 클라이언트의 요청으로만 인가를 처리하므로 Stateless 한 구조를 가진다.

  3. 세션/쿠키 방식과 유사하게 클라이언트는 Access Token(JWT)을 HTTP 헤더에 실어 서버로 보낸다.

  4. jwt는 입장권 자체만 보니까 세션보다 부하가 덜하다.

보안 문제점

  1. alg : none 으로 설정해도 되게끔 하면 공격당함.
  2. jwt는 디코딩이 쉬워서 민감한 정보를 담으면 안됨.
  3. 시크릿키 어렵게 만들어야 안뚫림.
  4. jwt 탈취 당할 시 회수/사용정지를 할 수 없으니
    훔치기 어렵게 http only cookie 저장소 솔루션을 쓰던가
    입장권 블랙 리스트 관리하면됨 -> 다만 세션과 같은 부하를 갖게됨.
    유효기간 짧게 설정 (5분)
    리플레쉬 토큰 사용 (언제나 1회용)

보안 대책

  1. access token은 JS private instance 에 보관.
  2. refresh token은 http only, same site strict 로 설정된 cookie 에 보관.
    Jwt 라도 위 2 가지만 되면, xss, csrf 공격에 대해 보안이 가능해짐.
    여기서 cookie secure 를 true 로 설정하면 스니핑 공격까지 막을 수 있음.
    다만, 구현 난이도가 상당함.

세션의 문제점

세션방식은 생각보다 DB 서버 부하가 너무 많은게 치명적.
1억명이 아니라 10만명만 넘어가도 웬만한 서버론 감당 하기가 힘듦.
redis 같이 메모리에 로드되는 방식을 생각할수 있는데 추가적인 비용문제도 있고
관리 하기도 힘듦.

0개의 댓글