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 |