1. JWT (Json Web Token)이란?
[JWT 개념]
JWT(JSON WEB TOKEN)이란 Json 포맷을 이용하여 사용자에 대한 속성으 저장하는 Claim 기반의 Web Token이다.
JWT는 토큰 자체를 정보로 사용하는 Self-Contained 방식으로 정보를 안전하게 전달한다.
주로 회원인증이나 정보전달 사용한다.
2. JWT 구조
[JWT 개념]
JWT의 구조는 3가지 부분으로 이루어지며 각각 Json 형태인 각부분은 Base64URl로 인코딩 되어 표현된다.
또한 각부분을 이어주기 위해 .(점)을 구분자로 사용한다.
- Header (헤더)
- Payload (페이로드)
- Signature (서명)
1. Header
구조는 typ와 alg로 구성됨
- typ : 토크의 타입지정 ex) JWT
- alg : 알고리즘 방식을 지정하며, Signature(서명) 및 토큰 검증에 사용됨 ex) H256(SHA256) or RSA
대표적으로 사용되는 알고리즘 (alg)은 아래의 리스트들이 있다
- HMAC
- SHA256
- RSA
- HS256 OR RS256
{ "alg" : "HS256", "typ" : "JWT" }
2.Payload
토큰에서 사용할 정보의 조각들인 Claim(클레임)이 담겨 있다.
Claim은 name/value의 한 쌍으로 이루어져 있다.
{ "sub": "1234567890", // 등록된 플레임 "name": "John Doe", // 비공개 플레임 "iat": 1516239022 // 등록된 플레임 }
Claim은 3가지로 나누어 진다
1. 등록된 클레임 (Registered Claim)
- 등록된 클레임 (Registered)
- 공개 클레임 (Public)
- 비공개 클레임 (Private)
토큰의 정보를 표현 하기 위해 이미 정해진 종류의 데이터 (7종류가 있다)
선택적으로 작성가능 하며, key의 길이는 간결성을 위해 String이 3의 길이이다.
2. 공개 클레임 (Public Claim)
- iss : 토큰 발급자 (issuer)
- sub : 토큰의 제목 (subject) - unique한 값 사용, 사용자의 email 주로 사용
- aud : 토큰의 대상자 (audience)
- nbf : 토큰 활성날짜 (notbefore) - 이날이 지나기전 토크 활성화 되지 않음
- exp: 토큰 만료시간 (expiration) - numericDate형식으로 되어 있어야함
- iat : 토큰 발급시간 (issued at) - 토큰 발급 이후의 경과시간을 알 수 있음
- jti : JWT 토큰 식별자 (JWT Id) - 중복 방지를 위해 사용, 일회용토큰(access Token)등에 사용됨
사용자 정의 클레임
공개용 정보를 위해 사용하며 충돌방지를 위해 Url 포맷을 이용
{ "https:yongoh1253.tistory.com":true }
3. 비공개 클레임 (Private Claim)
사용자 정의 클레임
서버와 클라이언트 사이에 임의로 지정한 정보를 저장{ "name": "John Doe" }
3. Signature (서명)
토큰을 인코딩하거나 유효성 검증을 할때 사용하는 고유화한 암호화 코드
Header와 Payload의 값을 각각 Base64Url로 인코딩하고 인코딩한 값을 다시 비밀키를 이용해 Header에서 정의한 알고리즘으로 해싱하고 이 값을 다시 Base64Url로 인코딩하여 생성
생성된 토큰은 Http 통신을 할때 'Authorization'이라는 key의 value로 사용
→ 일반적으로 value앞에 'Bearer '이 붙음
{ "Authorization" : "Bearer {생성된 토큰 값}" }
'jwt' 카테고리의 다른 글
jwt를 이용한 개발 시 이해한 내용 정리 (0) | 2024.01.07 |
---|