재학습/개념

JWT (Json Web Token) 간략하게 정리하고 가자

재이든 2021. 8. 1. 17:04
반응형

JWT(Json Web Token)

JSON포맷을 이용하여 사용자에 대한 속성을 저장하는 WebToken.

 

구조

Header / Payload / Signature 총 3부분을로 나눠짐.

-각 부분은 . (Dot) 구분자로 구분된다.

-각 부분은 Json형식으로 이루어져있다.

-각 부분은 모두 Base64로 인코딩되어 표현된다.

*Base64는 암호화된 문자열이 아니다. 따라서 같은 데이터에 대해 항상 같은 문자열을 반환한다.

 

Header

-typ : 토큰의 타입을 지정한다 ex) jwt

-alg : 알고리즘 방식을 지정한다. Signature(서명)및 토큰검증에 사용된다 ex) HS256 or RSA...

 

Payload

Payload는 토큰에서 사용할 정보들이 담겨있다.

Json포맷이기때문에 Key - Value로 표현되며, 이를 Claim이라 부른다.

클레임은 총 3개로 구분되어진다.

 

1.등록된 클레임

-JWT에서 이미 정해진 종류의 데이터 ex) 토큰발급자, 토큰발급날짜 ...

 

2.공개 클레임

-사용자 정의 클레임이며 공개 정보를 위해 사용된다.

 

3.비공개 클레임

-사용자 정의 클레임이며 비공개 정보를 위해 사용된다.

-서버와 클라이어늩 사이에 임의로 저장한 정보를 저자아한다.

 

*공개와 비공개클레임이 어떻게 차이가 있는지에 대해서는 자세하게 찾아보지 않았다.

 

Signature

-서명은 토큰을 인코딩하거나 유효성검증을 할 때 사용하는 고유한 암호화 코드이다.

 

이 시그니쳐가 어떻게 만들어지냐면...

1.Header와 Payload의 값을 각각 Base64로 인코딩한 문자열 값을 만든다.

2.이 값들을 'Header에서 정의한 알고리즘 + 비밀키'로 해싱처리한다.

3.해싱처리된 값을 Base64로 인코딩하여 생성되는 문자열 값이다.

 

그럼 결과적으로 아래와 같은 토큰이 생성된다.

 

 

이렇게 생성된 토큰은

HTTP통신 시,

Header에

Authorization이라는 Key의 Value로 사용된다.

그리고 Token앞에는 Bearer이 붙게된다.

이유는 모르나 다 이렇게 사용하고있더라.

ex)

"Authorization" : "Bearer <TOKEN>"

 

 

[마치며]

웹개발을 하다보면 다양한 개념을 접하게 되는데

항상 그 개념을 섬세하게 연구해보기에는

체력적으로나 시간적으로 한계가있더라. (물론 귀찮은게 크다)

그러나 개념은 파악해야 해두면 좋은게 많기때문에

이번 JWT토큰에 대한 포스트처럼 핵심만 간략히 살펴보는 포스팅을 자주 해보면 좋을것같다.

 

나중에 시간적 여유 + 내 마음의 끌림 이라는 타이밍이 생긴다면

더 깊게 연구해보겠다.

반응형

'재학습 > 개념' 카테고리의 다른 글

라이브러리는 최고야.. 짜릿해..  (0) 2023.07.03
[Session] 세션이란?  (0) 2023.01.03