ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Web - JWT란?
    Web/Web 2021. 10. 19. 22:18

    JWT란?

    JWT의 정의

    ㆍ JWT(Json Web Token)이란 Json 객체를 사용하여 가볍고 자가 수용적인 방식으로 정보를 안전성 있게 전달해주기 위한 토큰이다.

    ㆍ 주로 회원 인증이나 정보 전달에 사용된다.

     

    JWT의 구성요소

     

    ㆍ JWT는 '.'을 구분자로 3가지의 문자열로 구성된다.

    ㆍ aaaaaa.bbbbbb.cccccc의 구조를 기준으로 앞부분부터 헤더(eader), 정보(payload), 서명(signature)으로 구성된다.

     

    JWT의 사용 과정

     

    1. 브라우저에서 로그인을 수행하기 위해 username과 password를 입력한다.

    2. 서버 측에서 입력받은 정보를 통해 JWT를 생성한다.

    3. 서버는 브라우저에게 생성한 JWT를 전달한다.

    4. 브라우저는 JWT를 가지고 서버에게 데이터를 요청한다.

    5. 서버는 전달받은 JWT 서명을 확인하고 브라우저에게 정보를 제공한다.

     

    JWT의 사용목적

    ㆍ JWT를 이용해서 회원정보를 주고받게 되면 유저의 정보를 세션에 유지할 필요가 없게 된다.

    ㆍ 데이터를 주고받을 때 안전성 있게 정보를 교환할 수 있다.


    헤더(header)

    헤더(hedaer)의 구조
    {
        "typ" : "JWT",
        "alg" : "HS256"
    }

    ㆍ 헤더는 "typ"과 "alg" 두 가지의 정보를 지닌다.

    ㆍ "typ"은 토큰의 타입을 지정한다. 토큰의 타입이 JWT 이기 때문에 "JWT"라는 값이 들어간다.

    ㆍ "alg"는 해싱 알고리즘을 지정한다. 기본적으로 HMAC, SHA256, RSA가 있으며 토큰을 검증할 때 사용되는 서명(signature) 부분에서 사용된다.


    정보(payload)

    정보(payload)란?

    ㆍ 정보 부분에는 토큰에 담을 정보가 저장된다.

    ㆍ 정보의 한 조각을 클레임(claim)이라고 부르고, name / value의 한 쌍으로 이루어진다.

    ㆍ 클레임의 종류는 등록된(registered) 클레임, 공개(public) 클레임, 비공개(private) 클레임으로 3 종류로 나뉜다.

    ㆍ 토큰에는 여러 개의 클레임들을 넣을 수 있지만 너무 많아질 경우 토큰의 길이가 길이질 수 있다.

     

    등록된(registered) 클레임

    ㆍ 등록된 클레임은 토큰 정보를 표현하기 위해 이미 정해진 종류의 데이터들이다.

    ㆍ 모두 선택적으로 작성이 가능하며, 사용할 것을 권장한다.

          - iss : 토큰 발급자(issuer)

          - sub : 토큰 제목(subject)

          - aud : 토큰 대상자(audience)

          - exp : 토큰 만료 시간(expiration), NumericDate 형식으로 되어 있어야 함 ex) 1480849147370

          - nbf : 토큰 활성 날짜(not before), 이 날이 지나기 전의 토큰은 활성화되지 않음

          - iat : 토큰 발급 시간(issued at), 토큰 발급 이후의 경과 시간을 알 수 있음

          - jti : 토큰 식별자(jwt id), 중복 방지를 위해 사용

     

    공개(public) 클레임
    {
        "https://qlsdud0604.tistory.com" : true
    }

    공개 클레임은 사용자 정의 클레임으로, 공개용 정보를 위해 사용된다.

    ㆍ 충돌 방지를 위해 URI 포맷을 이용한다.

     

    비공개(private) 클레임
    {
        "token_type" : access 
    }

    ㆍ 비공개 클레임은 사용자 정의 클레임으로, 서버와 클라이언트 사이에 임의로 지정한 정보를 저장한다.


    서명(signature)

    서명(signature)이란?

    ㆍ 위에서 만든 헤더와 정보의 값을 각각 base64로 인코딩한다.

    인코딩한 값을 합친 후 비밀 키를 이용해 헤더에서 정의한 알고리즘으로 해싱한다.

    이 값을 다시 base64로 인코딩하여 생성한 것이 서명이다.

     

    완성된 JWT의 예시

     

     

    728x90

    'Web > Web' 카테고리의 다른 글

    Web - OAuth란?  (0) 2021.10.20
    Web - Web Server & WAS  (0) 2021.10.20
    Web - RSA 암호화  (0) 2021.10.19
    Web - CIA  (0) 2021.10.19
    Web - Cookie & Session  (0) 2021.10.19

    댓글

Designed by Tistory.