[CS공부] 네트워크 구조(9)-토큰(Json Web Token)

Min Kim·2023년 2월 28일
0

CS 공부

목록 보기
10/15

들어가기 전에


토큰에 대해 알아봅시다.

1. 개념 비교


Video Label

  • 세션 : 인증에 대한 정보를 서버가 저장
  • 토큰 : 인증에 대한 정보를 사용자가 저장

😜 추가 지식

  • 인증과 인가 차이
    • 인증 : 처음 요청 시 클라이언트가 사용자가 맞는지 확인
    • 인가 : 확인된 사용자가 인증된 상태에서 사용할 수 있는 접근들을 허용

2. 토큰


  • 암호화된 데이터
  • 주로 JWT라 하는데 JSON 형식으로 암호화된 웹 토큰
  • header, payload, signature으로 구성
    • 헤더는 토큰의 데이터 타입(JWT 고정값)알고리즘 정보
    • 페이로드사용자의 정보나 데이터 속성 등의 claim
      (보통 누가 누구에게 발급했는지, 토큰의 유효기간, 사용자 이름, role 등)
    • 서명header + payload 를 서명한 값으로 헤더에 있는 알고리즘으로 서명

😜 추가 지식

  • claim : payload에 들어갈 정보

  • 세션과 토큰 비교
    • 세션보다 토큰이 사이즈가 큼
    • 세션보다 토큰이 안정성이 떨어짐
      (세션은 서버에서 관리, 토큰은 사용자가 관리)
    • 세션보다 토큰이 확장성이 좋음
      • 세션은 다중 접속시 과부화 위험
      • 과부화를 줄이기 위해 서버를 늘릴 경우 사용이 복잡

3. 한 눈에 보는 세션, 토큰 동작방식


1) 세션

  • 유저가 로그인, 서버 메모리 상에 세션 저장
    (세션을 구분하기 위해 Seesion Id를 기준으로 정보를 저장)
  • 클라이언트의 브라우저에 쿠키로 Session Id가 저장
  • 브라우저는 해당 사이트에 대한 모든 요청에 Session Id를 쿠키에 담아 전송
  • 서버는 클라이언트가 보낸 Session Id와 서버 메모리를 관리하고 있는 Session Id를 비교해서 일치하면 인가(Authorization)를 수행

2) 토큰

  • 로그인을 요청, id, pw 정보가 유효하다면 Secret Key를 사용해서 유저에게 토큰을 발급
  • 클라이언트는 발급 받은 토큰을 저장, 서버에 요청 할 때 마다, 해당 토큰을 함께 서버에 전달
  • 서버는 토큰을 검증, 확인 시 요청에 응답

😜 추가 지식

  • 세션 인증과 토큰 인증의 장단점
    • 세션
      • 장점
        • 서버에 저장하기 때문에 관리가 매우 편하고 효율적
        • 구현이 명확하며 실제 서버에서 로그인 상태를 확인하기 유용
      • 단점
        • 서버에서 클라이언트의 상태를 모두 유지하고 있어야 하므로, 클라이언트 수가 많으면 DB의 과부하
        • 멀티 디바이스 환경(모바일, 공동 사용 등)에서 로그인 시 중복 로그인 처리가 되지 않는 등의 신경 써야 할 부분들이 발생
        • 사용자가 많아지는 경우 로드 밸런싱을 사용한 서버 확장을 이용해야 하는데 이 때 세션의 관리가 어려워짐 (확장성이 낮음)
    • 토큰
      • 장점
        • 클라이언트에 토큰이 저장되어 있기 때문에 서버의 메모리에 부담이 되지 않으며 Scale에 있어 대비책이 필요 없음
        • 멀티 디바이스 환경에 대한 부담이 없음
      • 단점
        • 암호화가 쉽게 풀릴 가능성이 높음
          (암호화가 풀리더라도 토큰을 사용할 수 없도록 만료기간을 짧게 설정)
        • payload 자체는 암호화 되지 않고 base64 URL로 인코딩한 데이터이므로, 중간에 payload를 탈취하면 디코딩을 통해 데이터를 볼 수 있음
          => JWE를 통해 암호화 하거나, payload에 중요한 데이터를 넣지 않아야 함
  • Base64 URL
    8비트 이진 데이터 (ex 실행파일, ZIP 파일 등)를 문자 코드에 영향을 받지 않는 공통 ASCII 영역의 문자들로만 이루어진 일련의 문자열로 바꾸는 인코딩 방식
  • 로드 밸런싱(Load Balancing)
    서버가 처리해야 할 업무 혹은 요청(Load)여러 대의 서버로 나누어(Balancing)처리하는 것

참고


해당 사이트의 내용을 참고로 작성했습니다. 추후에 더 알게 되는 내용들을 추가하겠습니다.

JWT(JSON Web Token)의 개념부터 구현까지 알아보기 - 정상우
JWT 토큰이란??
[인증/인가]Session(세션)과 Token(토큰)(JWT)의 차이점
세션 기반 인증과 토큰 기반 인증 (feat. 인증과 인가)
세션 인증 방식 vs 토큰 인증 방식
세션 인증 방식 VS Token 인증방식(인증과 인가)
쿠키, 세션(cookie, session)과 토큰 (token, JWT)의 차이점
Session 기반 인증과 Token 기반 인증
Cookie, Session, Token 의 차이점

profile
Better & Better 꾸준히 성장하는 개발자

0개의 댓글