ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2024-06-10 TIL (jwt (jsonwebtoken))
    카테고리 없음 2024. 6. 10. 15:37

    jwt (jsonwebtoken)

     

     

     

    jwt 구조 

    헤더, 내용, 서명이 '.(dot)'을 구분자로 하여 JWT 토큰 1개를 이룹니다.

    ex)

    eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. (HEADER) eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.(PATLOAD) SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c(SIGNATURE)

     

    HEADER

    {
      "alg": "HS256",
      "typ": "JWT"
    }

     

    헤더에서는 해시 알고리즘과 토큰의 타입을 정의할 수 있습니다.
    HS256은 HMAC SHA 256을 의미합니다.
    해시 알고리즘 중 한 가지입니다.
    타입의 값 JWT는 이 토큰을 JWT로 지정한다.

     

    PAYLOAD:DATA

    {
      "sub": "1234567890",
      "name": "John Doe",
      "iat": 1516239022
    }

    내용에서는 전달하는 데이터를 포함할 수 있습니다.

     

    VERIFY SIGNATURE

    HMACSHA256(
      base64UrlEncode(header) + "." +
      base64UrlEncode(payload),
      secret
    )

    secret은 말 그대로 유저가 지정하는 비밀 코드입니다.
    위와 같이 해싱하면 서명이 완성됩니다.

     

     

    access token, refresh token

    출처 : https://velog.io/@vamos_eon/JWT%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%EA%B0%80-%EC%82%AC%EC%9A%A9%EC%B2%982

     

    • access token : API를 사용하기 위한 인증용 토큰
      이 토큰이 만료되면 access token이 없는 것과 마찬가지입니다.
      따라서 접근을 막을 수 있습니다.

     

    • refresh token : access token의 유효 기간 연장을 위한 토큰
      access token이 만료되었지만 refresh token으로 access token을 새로 발급받을 수 있게 해줍니다.

    그렇다면 여기서 refresh token은 사용하는이유가 무엇인가 ?..라는 의문이 생긴다...

     

    전달하는방식 - > cookies

    jwt를 전달하는 방식은 여러가지가 있지만, 그거는 나중에 또 정리하도록 하고 이번에는 cookies방식으로 전달하는 방식으로 진행한다 .

    Cookie에 JWT를 포함하여 보내주고 기본적으로 브라우저에 저장되고 자동으로 제거되지 않습니다.
    때문에 Cookie옵션을 세팅을 하지 않고 사용하면 굉장히 위험합니다.

    그렇기때문에 이를 방지하는 방법으로 

    1. expiry를 설정하는 방법,

     ㄴ> 토큰의 유효 기간을 지정하여 발급을 함으로써 만료된 이후에는 브라우저 쿠키에서 제거됩니다.

    2. 다른 도메인에서 접근 불가하게 만드는 방법

     ㄴ> CORS 도메인을 제한하는 방법

    3. 자바스크립트로 쿠키 값에 접근하는 것을 막는 방법

     

     

Designed by Tistory.