[0905] JWT

한별·2024년 9월 4일

스파르타 내배캠 TIL

목록 보기
62/63

JWT

Json Web Token

  • Json 형태의 데이터를 네트워크를 통해 서로 다른 장치끼리 안전하게 전송하기 위해서 사용

구성

header: 어떤 알고리즘으로 서명했는지 (alg = algorithm)
payload: 내용
signature: 서명. 서명에는 여러가지 방법이 존재함

JWT Encoding/Decoding 사이트

이 3가지를 base64로 인코딩한 것을 연결한 텍스트가 JWT이다.

작동 원리

secret key + payload --- alg (ex. hmac) ---> signature

secret keypayloadHMAC 알고리즘의 입력으로 넣으면 그에 맞는 signature이 생긴다.

secret key를 제외한 3가지 baseURL로 변환해 JWT 형태로 클라이언트에게 넘겨주고, secret key는 갖고 있는다.

서버는 JWT에 대한 정보를 갖고 있지 않아도 시크릿 키와 클라이언트에서 준 JWT 정보를 가지고 signature를 만들어 비교함으로써 인증받을 수 있다.

기존 방식(세션)의 단점

  • sessionID에는 유저정보가 포함되어있지 않기 때문에 다시 서버를 조회해야 한다
    → JWT는 클라이언트에서도 payload를 baseURL로 디코딩하면 원본 데이터를 얻을 수 있다.
  • 서버에 접속할 떄마다 세션 테이블을 확인해야 한다
  • 사용자가 새로운 기기로 접속할 때마다 세션 아이디가 생성되므로 세션 DB의 양이 굉장히 많아진다
    → DB에 접속할 필요도, Session Table도 필요가 없다.
    → 서버 부담 ↓↓↓↓↓↓↓

JWT의 문제점

JWT 토큰을 탈취당한 경우, 취약하다. JWT 토큰을 탈취한 사람은 인증을 통과할 수 있게 된다.

해결 방법

  • 토큰을 훔치기 어렵게 훔치기 어려운 저장소에 저장한다. (HTTPOnly cookie)
  • 토큰에 유효기간을 짧게 두어 일정 시간이 지나면 사용할 수 없게 한다.
    하지만, 너무 짧으면 로그인을 자주해야 하여 UX가 떨어진다.
  • Access Token과 Refresh Token을 사용한다.
    평소에 통신할 때는 Access Token를 사용하고 Access Token이 만료되면 Refresh Token을 이용하여 Access Token을 갱신한다.
    탈취 위험이 큰 Access Token은 유효 기간을 짧게 두고, Refresh Token으로 재발급하여 보안을 높이는 방법이다.

    Refresh Token이 탈취당한다면?
    Refresh Token Rotation! Access Token을 재발급받을 때마다 Refresh Token도 새로 받는 것.

참고 자료

JWT 대충 쓰면 님들 코딩인생 끝남 | 코딩애플
🧐 Access Token과 Refresh Token이란 무엇이고 왜 필요할까? | 김민주 | 김츄의 개발일지
JWT | 생활코딩

profile
글 잘 쓰고 싶어요

0개의 댓글