본문 바로가기
Flutter/Flutter Study

[Flutter] JWT 토큰, Aceess Token, Refresh Token이란?

by 왁왁s 2023. 5. 20.
Contents

     

    JWT (JSON Web Token)이란?

    JWT (JSON Web Token) 토큰은 인증과 정보 교환을 위한 업계 표준이다. JWT는 클라이언트와 서버 간의 안전한 방식으로 정보를 전송하기 위해 사용된다. 이 토큰은 JSON 형식으로 표현되며, 클레임(claim)이라고 불리는 정보를 포함하고 서명(signature)을 통해 검증된다.

     

    JWT (JSON Web Token) 구조

    JWT 토큰은 아래와 같이 점( . )을 기준으로 세 가지 부분으로 구성한다.

     

    Hearder(헤더) . Payload(페이로드) . Signature (서명)

     

    Header(헤더)

    토큰의 유형과 해싱 알고리즘을 포함한다. 일반적으로 "alg"라는 필드에 암호화 알고리즘(예: HMAC, RSA, 등)을 지정한다. 

     

    Payload(페이로드)

    토큰에 담기는 클레임(claim) 정보를 포함한다. 클레임은 토큰에 저장될 사용자 정보, 권한, 만료일 등을 의미합니다. 예를 들어, 사용자의 아이디나 역할과 같은 정보를 포함할 수 있다. 

     

    Signature(서명)

    헤더, 페이로드 및 비밀 키를 사용하여 생성된다. 서버는 토큰의 서명을 검증하여 토큰이 변조되지 않았음을 확인한다.

     

     

     

    JWT to JSON

    왼쪽에 있는 JWT를 JSON으로 디코딩을 해주면 헤더, 페이로드, 서명 부분이 나온다.

     

    Signature부분에 비밀번호 역할을 하는 Secret 값이 들어가는데, 이 부분이 일치하지 않으면 해당 데이터에 접근을 할 수 없도록 깨진다.

    아래의 사이트에서 JWT를 만들어볼 수 있다.

    Signature 부분의 Secret 값을 바꾸거나 내용들을 바꾸면 Encoded 부분이 바뀌는 것을 확인할 수 있다.

     

    https://jwt.io/

     

    JWT.IO

    JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties.

    jwt.io

     

     

    위의 사이트에서 JWT를 만들었을 때, JWT 부분을 임의로 변경하면 Invalid Signature가 뜨면서 Payload 부분의 데이터가 깨지는 것을 볼 수 있다.

     

    이것을 보면 누군가가 토큰을 변경하게 되면 데이터가 깨져, 변조를 했는지 안 했는지 확인할 수 있게 된다.

     

     


     

    Access Token과 Refresh Token
    JWT 토큰 중 Refresh Token과 Access Token은 현대적인 웹 애플리케이션에서 인증과 세션 관리를 위한 필수적인 도구이다. Access Token은 자원에 접근하기 위한 인증 정보로 사용되며, Refresh Token은 Access Token의 갱신과 세션 관리를 담당한다.

    https://documentatie.uitdatabank.be/content/entry_api_3/latest/authentication/authentication-jwt-refreshToken.html

     

    Access Token이란?

    • Access Token은 사용자의 인증과 자원에 대한 접근을 위한 토큰이다.
    • 사용자가 로그인을 성공하면, 서버는 해당 사용자에게 Access Token을 발급한다.
    • Access Token은 클라이언트 측에서 안전한 저장소에 저장되어 인증된 요청 시 헤더에 포함되어 서버에 전달된다.
    • 이 토큰은 주로 짧은 유효 기간을 가지며, 만료되면 다시 인증을 거쳐야 한다.
    • 서버는 Access Token을 검증하여 사용자의 신원을 확인하고 요청에 대한 권한을 부여한다.

     

    Refresh Token이란?

    • Refresh Token은 Access Token의 갱신과 세션 관리를 위해 사용되는 토큰이다.
    • 사용자가 로그인을 성공하면, 서버는 함께 Refresh Token을 발급한다.
    • Refresh Token은 주로 Access Token보다 긴 유효 기간을 가지며, 일반적으로 일주일 또는 한 달과 같은 기간으로 설정된다.
    • 클라이언트는 Refresh Token을 안전한 저장소에 저장하여 보관한다.
    • Access Token의 유효 기간이 만료되면, 클라이언트는 Refresh Token을 사용하여 새로운 Access Token을 서버에 요청한다.
    • 서버는 Refresh Token의 유효성을 검증하고, 유효한 경우 새로운 Access Token을 발급하여 클라이언트에게 전달한다.

     

    Refresh Token과 Access Token의 차이점

    • 유효 기간: Access Token은 짧은 유효 기간을 가지고, Refresh Token은 긴 유효 기간을 가진다. 
    • 사용 용도: Access Token은 자원에 접근하기 위한 인증 정보로 사용되며, Refresh Token은 Access Token의 갱신과 세션 관리에 사용된다. 
    • 저장 위치: Access Token은 클라이언트 측의 임시 저장소에, Refresh Token은 안전한 저장소에 보관된다. 
    • 발급 주체: 서버가 사용자 인증에 성공하면, Access Token과 Refresh Token을 모두 발급한다. 
    • 유효성 검증: 서버는 Access Token과 Refresh Token을 각각 검증하여 사용자의 인증과 권한을 확인한다.

     

    댓글