[네트워크] JWT 토큰

2023. 7. 17. 14:45·CS 지식/[네트워크]
  • Claim : key-value 형식으로 이루어진 한 쌍의 정보

JWT 토큰

  • JSON 포맷을 이용하는 Claim 기반의 웹 토큰
  • 토큰 자체를 정보로 사용하는 Self-Contained 방식으로 정보를 안전하게 전달함

1) 헤더(Header)

  • 토큰의 타입과 해시 암호화 알고리즘(방식지정)으로 이루어져 있음
  • alg : 서명 암호화 알고리즘(ex: HMAC SHA256, RSA)
  • typ : 토큰 유형

 

2) 내용(Payload)

  • 토큰에 사용자가 담고자 하는 정보를 담음
  • 내용에는 Claim이 담겨있고, JSON(Key/Value) 형태의 한 쌍으로 이루어져 있음
  • 클레임 단위
    • 등록된 클레임 (Registered Claim), 공개 클레임 (Public Claim), 비공개 클레임 (Private Claim)
    • 1) 등록된 클레임 (Registered Claim)
      • JWT 사양에 이미 정의된 클레임
      • iss : Issuer. 토큰 발급자
      • sub : Subject. 토큰 제목
      • aud : Audience. 토큰 대상자
      • exp : Expiration Time. 토큰 만료 시각. Numeric Date 형식.
      • nbf : Not Before. 토큰의 활성 시각. 쉽게 말해, 이 시각 전에는 토큰이 유효하지 않다는 의미, Numeric Date 형식
      • iat : Issued At. 토큰이 발급된 시각. Numeric Date 형식. 이 값으로 토큰이 발급된지 얼마나 오래됐는지 확인할 수 있음
      • jti JWT ID. JWT 의 식별자
      2) 공개 클레임 (Public Claim)
      • JWT를 사용하는 사람들에 의해 정의되는 클레임
      • 충돌 방지를 위해 URI 형태로 이름을 짓거나, IANA JSON Web Token Claims Registry 라는 곳에 직접 클레임을 등록
      3) 비공개 클레임 (Private Claim)
      • 서버와 클라이언트 사이에서만 협의된 클레임
      • 공개 클레임과 충돌이 일어나지 않게 사용하면 됨

3) 서명(Signature)

  • 토큰을 인코딩하거나 유효성 검증할 때 사용하는 고유한 암호화 코드
  • 헤더와 내용의 값을 인코딩함

 

주의사항

  • 무상태(Stateless) 한 특징을 가지고 있음
  • 서버에서는 아무런 정보도 가지고 있지 않으며, 토큰 자체의 만료일자까지 토큰 자신이 가지고 있음
  • 누군가 토큰을 탈취해간다면 누구나 토큰을 탈취 당한 사람의 계정에 접근할 수 있게 됨
  • 하지만, 서버에서는 JWT 가 만료될 때 까지 아무런 조치도 취할 수 없으며, 그저 바라만보고 있어야 함
  • 즉, 이미 발행된 토큰에 대해 서버는 아무런 제어도 할 수 없음

⇒ 취약점을 막기 위해 현재는 많은 서비스들이 Access Token 과 Refresh Token 을 함께 사용

저작자표시 비영리 변경금지 (새창열림)

'CS 지식 > [네트워크]' 카테고리의 다른 글

[네트워크] Connection Timeout과 Read Timeout  (0) 2023.07.17
[네트워크] DNS  (0) 2023.07.17
[네트워크] 공인(public) IP와 사설(private) IP  (0) 2023.07.17
[네트워크] 세션 기반 인증 & 토큰 기반 인증  (1) 2023.07.17
[네트워크] 쿠키 & 세션  (1) 2023.07.17
'CS 지식/[네트워크]' 카테고리의 다른 글
  • [네트워크] Connection Timeout과 Read Timeout
  • [네트워크] DNS
  • [네트워크] 공인(public) IP와 사설(private) IP
  • [네트워크] 세션 기반 인증 & 토큰 기반 인증
woojin._.
woojin._.
여러가지 개발을 해보며 발생하는 이야기들에 대한 블로그입니다:)
  • woojin._.
    Jin's Dev Story
    woojin._.
  • 전체
    오늘
    어제
    • 분류 전체보기 (829)
      • Tools (25)
        • eGovFrame (3)
        • GeoServer (3)
        • QGIS (2)
        • LabelImg (2)
        • Git (6)
        • GitHub (1)
        • Eclipse (7)
        • Visual Studio (1)
      • Web & Android (121)
        • SpringBoot (37)
        • Three.js (2)
        • Spring Data JPA (9)
        • 스프링 부트 쇼핑몰 프로젝트 with JPA (25)
        • Thymeleaf (4)
        • Spring Security (15)
        • Flutter (29)
      • Programming Language (61)
        • JAVA (27)
        • JavaScript (14)
        • Dart (2)
        • Python (15)
        • PHP (3)
      • Database (43)
        • PostgreSQL (32)
        • MYSQL (7)
        • Oracle (3)
        • MSSQL (1)
      • SERVER (17)
        • TCP_IP (3)
        • 리눅스 (7)
        • AWS (7)
      • Coding Test (445)
        • 백준[JAVA] (108)
        • 프로그래머스[JAVA] (260)
        • 알고리즘 고득점 Kit[JAVA] (3)
        • SQL 고득점 Kit[ORACLE] (74)
      • CS 지식 (49)
        • [자료구조] (14)
        • [네트워크] (12)
        • [데이터베이스] (10)
        • [알고리즘] (9)
        • [운영체제] (4)
      • 기타 (6)
      • 자격증 & 공부 (62)
        • 정보처리기사 (2)
        • SQLD (6)
        • 네트워크관리사 2급 (5)
        • 리눅스마스터 1급 (44)
        • 리눅스마스터 2급 (1)
        • ISTQB (3)
        • 시스템보안 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 인기 글

  • 태그

    programmers
    postgresql
    pcce 기출문제
    백준
    플러터
    CS지식
    backjoon
    DB
    시큐리티
    데이터베이스
    Oracle
    프로그래머스
    리눅스
    python
    Flutter
    자바
    Spring Security
    스프링
    리눅스마스터
    spring
    리눅스마스터 1급
    Java
    baekjoon
    CS
    스프링부트
    JPA
    Linux
    데이터
    springboot
    스프링 부트 쇼핑몰 프로젝트 with JPA
  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
woojin._.
[네트워크] JWT 토큰
상단으로

티스토리툴바