[CS] JWT

·2023년 1월 27일
0

⚡ JWT가 무엇일까


위키백과에 따르면 JWT는 JSON 웹 토큰은 선택적 서명 및 선택적 암호화를 사용하여 데이터를 만들기 위한 인터넷 표준으로 페이로드는 몇몇 클레임 표명을 처리하는 JSON을 보관하고 있다고 한다. 토큰은 비공개 시크릿 키 또는 공개/비공개 키를 사용하여 서명되는데 가령 서버에 "관리자로 로그인됨"이라는 클레임이 있는 토큰을 생성하여 이를 클라이언트에 제공할 수 있다고 한다. 그렇게 되면 클라이언트는 해당 토큰을 사용하여 관리자로 로그인됨을 증명한다고 한다.

그렇다면 JWT 토큰 구성은 어떻게 될까?

JWT는 세 파트로 나누어지며, 각 파트는 점으로 구분하여 표현되는데 그 표현은 그림과 같다. 순서대로 헤더(Header), 페이로드(Payload), 서명(Sinature)로 구성한다고 한다. 각각의 구성은 어떻게 되있는 걸까? 다음과 같다.


보통 토큰의 타입이나 서명 생성에 어떤 알고리즘이 사용되었는지 저장한다고 한다. 이미지 상에는 xxxxx부분이 헤더를 나타낸다.

# Header
{
	"typ" : "JWT",   # 토큰 유형을 나타내는 부분
    "alg" : "HS512"  # HMAC, SHA256, RSA와 같은 해시 알고리즘을 나타내는 부분
}

Payload


토큰에 담을 클레임 정보를 포함하고 있다고 한다. Payload에 담는 정보의 한 조각을 보통 클레임이라고 부르고 이는 name/value 의 한쌍으로 이루어져 있으며 토큰에 여러개의 클레임을 넣을 수 있다. 위의 이미지에서는 yyyyy 부분이 페이로드에 해당된다.

# Payload
{
	"sub" : "1",      # 토큰 제목 - 토큰에서 사용자에 대한 식별 값으로 사용됨
    "iss" : "ori",    # 토큰 발급자
    "exp" : 1636989718,    # 토큰 만료 시간
    "iat" : 1636989718     # 토큰 발급 시간
}

Signature


서명에 대한 정보를 담는다고 한다. 암호화 되어있으며 서버에 있는 개인키로만 암호화를 제거할 수 있다고 하며 다른 클라이언트가 임의로 Signature를 복호화 할 수는 없다고 한다. 위의 이미지에서는 zzzzz 부분이 그에 해당 된다고 볼 수 있다.



참고자료
http://www.opennaru.com/opennaru-blog/jwt-json-web-token/
https://brunch.co.kr/@jinyoungchoi95/1

profile
뉴비는 문서화를 습관화 해보자

0개의 댓글