상세 컨텐츠

본문 제목

[개념] JSON Web Tokens (JWT)

개발/개념

by 대충고양이짤 2022. 2. 11. 18:28

본문

JSON Web Token?

  • 정보를 JSON 개체로 안전하게 전송하기 위한 간결하고 자체 포함된 방법을 정의하는 정규 표쥰(RFC 7519)
  • 비밀키를 이용하여 서명(signing)했기 때문에 위조는 불가능하며, 신뢰성을 보장한다
  • 정보(claims)를 추가 가능하여 이 또한 무결성을 보장한다
  • JSON 형태로 구성된다
  • Authorization header에 추가된다

JSON Web Token 구조

Header, Payload, Signature로 구성되며 이 세가지를 콤마(.)로 구분하여 이어 붙인다.

 

  • Header
    서명에 사용한 알고리즘 정보
    • typ : 토큰 타입
    • alg : 사용한 알고리즘. (ex: SHA256, RSA, etc)
    • { "alg" : "HS256", "typ" : "JWT" }
  • Payload
    정보(claim)을 포함한 부분
    • registred claims : mandatory는 아니지만 recommended인 항목
      • iss : issuer. 발급자
      • exp : expiration time. 만료 시간
      • sub : subject. 제목
      • aud : audience. 대상
  • Signature
    헤더를 base64로 인코딩한 값과, 페이로드를 base64로 인코딩한 값을 콤마로 이어 붙인 값을, 비밀키를 사용하여 헤더에서 언급한 알고리즘으로 암호화하여 생성하나 해쉬값.

xxxxxx.yyyyyy.zzzzzz

Access Token, Refresh Token

JWT의 문제점

JWT는 stateless한 방식이기 때문에 서버에서는 이 Access token을 보낸 클라이언트가 JWT를 요청한 클라이언트인지 알 수 없다. 탈취당한 토큰으로 서버에 요청이 가능하다. 그렇기 때문에 아래와 같은 방식으로 사용한다

  • access token의 유효기간을 짧게하고 refresh token의 유효기간을 길게하여
  • 사용자는 access token을 통해 짧은 시간에 자원이 접근하다가
  • 만료가 되면 refresh token을 확인하여 검증 후 새로운 access token을 발급하는 프로세스를 수행한다
  • 탈취한 공격자는 탈취에 성공하더라도 짧은 유효기간 동안에만 access token을 사용할 수 있다

참고 사이트

'개발 > 개념' 카테고리의 다른 글

[GCP] Firestore 시간 가져오기, 비교  (0) 2022.02.17

관련글 더보기

댓글 영역