티스토리 뷰

기타

JWT

세이브 2022. 11. 20. 21:52

<두 줄 정리>

JSON 형식의 데이터를 전자 서명(Sign)하여 URL-safe문자열로 표현한으로 것으로 

인증된 사용자를 식별하는 데 주로 사용된다.

 

*URL Safe : URL에 포함할 수 없는 문자를 포함하지 않는 것을 말한다.

 

What is JWT?

JWT는 일반적으로 클라이언트와 서버 두 개체 간의 정보를 공유할 때, 인증된 사용자인지 식별하는데 사용되는 토큰입니다. 

각 JWT는 다른 클라이언트나 악의적인 당사자가 JWT Clams(JSON Contents)을 변경할 수 없도록

암호화를 사용하여 서명(Signed)되어 있다.

 

JWT 구조

- Header : 사용된 서명알고리즘, 토큰 타입

- Paylaod: 토큰의 담을 정보가 들어있다. 여기에 담는 정보의 한 조각을 클레임(Claim)이라고 부른다.

  * Claim 구성요소 : sub, iat, aud, iss .... 등등

- signature : 암호화 알고리즘을 통해 만들어진 문자열로 이 문자열은 JSON Payload의 무결성을 확인하는데 사용된다.

 

 

JWT 생성 과정

1) JSON 생성

{
    "userId": "abcd123",
    "expiry": 1646635611301
}

 

2) JWT 서명에 사용될 키를 만들고, 어떤 알고리즘으로 서명할지 결정한다.

Signing Key:
NTNv7j0TuYARvmNMmWXo6fKvM4o6nv/aUi9ryX38ZH+L1bkrnD1ObOQ8JAUmHCBq7Iy7otZcyAagBLHVKvvYaIpmMuxmARQ97jUVG16Jkpkp1wXOPsrF9zwew6TpczyHkHgX5EuLg2MeBuiT/qJACs1J0apruOOJCg/gOtkjB4c=
Signing algorithm :
 HS256

 

 

3) 헤더를 만든다

헤더는 서명 알고리즘에 대한 정보를 가지고 있다. Payload와 마찬가지로 이것도 JSON 형식으로 되어있다.

{
    "typ": "JWT",
    "alg": "HS256"
}



4) 서명(Signature)을 만든다 

 - (1) Payload JSON 의 공백을 제거한 후 , 그리고 base64 로 인코딩하면 아래 문자열이 나온다

eyJ1c2VySWQiOiJhYmNkMTIzIiwiZXhwaXJ5IjoxNjQ2NjM1NjExMzAxfQ

 - (2) 헤더JSON도 (1)과 같은 방식으로 인코딩한다.  
 - (3) (1)(2)을 통해 생성된 base64문자열들 사이에 점(.)을 두고 연결한다.

 - (4) 헤더의 인코딩 값과 페이로드의 인코딩값을 합친후 주어진 비밀키(secret)로 해쉬(hash)를 하여 최종적으로 서명(Signature)을 생성한다. 그리고 나서 결과로 산출된 해쉬를 base64형태로 나타내준다.

Base64URLSafe(
    HMACSHA256("eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJhYmNkMTIzIiwiZXhwaXJ5IjoxNjQ2NjM1NjExMzAxfQ", "NTNv7j0TuYARvmNMmWXo6fKvM4o6nv/aUi9ryX38ZH+L1bkrnD1ObOQ8JAUmHCBq7Iy7otZcyAagBLHVKvvYaIpmMuxmARQ97jUVG16Jkpkp1wXOPsrF9zwew6TpczyHkHgX5EuLg2MeBuiT/qJACs1J0apruOOJCg/gOtkjB4c=")
)

Results in:
3Thp81rDFrKXr3WrY1MyMnNK8kKoZBX9lg-JwFznR-M

 



5) 위에서 만든 문자열들을 연결시켜 JWT를 만든다. 

<header>.<body>.<secret> 형식

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJhYmNkMTIzIiwiZXhwaXJ5IjoxNjQ2NjM1NjExMzAxfQ.3Thp81rDFrKXr3WrY1MyMnNK8kKoZBX9lg-JwFznR-M

 

 

참고

https://velopert.com/2389

'기타' 카테고리의 다른 글

행동 - 디자인 패턴  (0) 2022.11.13
구조 - 디자인패턴  (0) 2022.11.13
생성 - 디자인 패턴  (0) 2022.11.12
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함