본문 바로가기
CS/web

JWT(Json Web Token)

by kyj0032 2024. 3. 8.

정의

JSON 객체에 인증에 필요한 정보들을 담은 후 비밀 키로 서명한 토큰, 인터넷 표준 인증 방식

인증(Authentication) & 권한 허가(Authorization) 방식

 

구조

  • header
    • alg
    • typ
  • payload
    • 사용자 정보(claim)
      • sub, aud, iat, exp
  • signature
    • header+payload를 alg과 secret key로 암호화
    • signature는 secret key가 있어야 복호화할 수 있고, 이때문에 토큰이 중간에 악의적으로 수정되어도 판별할 수 있음

프로세스

토큰 생성

  1. 사용자 ---로그인---> 서버
  2.                                  서버: 확인 후 secret key로 JWT 생성
  3. 사용자 <--토큰------- 서버

토큰 이용

사용자는 API 요청할 때마다 서버에 토큰을 동봉,

서버는 그 토큰으로 사용자를 인증하고 맞는 사용자면 응답함

 

장점

  • 토큰 안에 모든 인증에 관한 정보가 다 있어 편리함
    • 세션과 달리 서버에 부하도 없고(토큰이 다 담고 있음)
    • 쿠키와 달리 보안에 더 유리함(secret key가 있어야 정보를 읽을 수 있고, 토큰이 조작되어도 검증 가능)

Access Token과 Refresh 토큰

로그인을 하면 Access Token과 Refresh Token이 발급됨.

  • Access Token
    • 평소에 사용자가 http헤더에 보내서 인증하는 용도
    • 유효 기간이 짧음
  • Refresh Token
    • Access Token이 만료되면 보내서 다시 Access Token을 발급받는 용도
    • Access Token보다 상대적으로 긺

보안에 유리한 이유

  • Access Token이 탈취되면?
    • 상대적으로 짧게 만료되기 때문에 괜찮음
  • Refresh Token이 탈취되면?
    • Refresh Token Rotation으로 보완 가능
      • Access Token을 재요청할 때마다 Refresh Token을 새로 발급받도록 함.
      • 만료 시간이 길어 보안적으로 불리한 Refresh Token을 보완할 수 있음

https://velog.io/@chuu1019/Access-Token%EA%B3%BC-Refresh-Token%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EA%B3%A0-%EC%99%9C-%ED%95%84%EC%9A%94%ED%95%A0%EA%B9%8C

http://www.opennaru.com/opennaru-blog/jwt-json-web-token/

'CS > web' 카테고리의 다른 글

CSRF, XSS, CORS  (0) 2024.03.12
CSR (Client Side Rendering) & SSR (Server Side Rendering)  (0) 2024.03.08
OAuth  (0) 2024.03.04
Web Server와 WAS  (0) 2024.03.01
[web] REST, REST API  (0) 2024.02.19