Json
포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim
기반의 Web Token
이다.
3가지로 구성 - Header
, Payload
, Signature
Json 형태인 각 부분은 Base64Url로 인코딩 되어 표현된다. 중간엔 .
구분자를 사용하여 각각의 부분을 이어준다.
토큰의 헤더: typ + alg
- typ: 토큰의 타입 지정
- alg: 해싱 알고리즘을 지정 (보통 HMAC SHA256 / RSA 사용)
- HMAC(해시 메시지 인증코드): 송신자와 수신자만이 공유하고 있는 키와 메시지를 혼합해 해시 값 생성
- RSA: 공개키 암호 알고리즘 중 하나. 암호화나 전자서명의 용도로 사용됨
{ "alg": "HS256", "typ": "JWT" }
토큰에서 사용할 정보의 조각들인 Claim
이 담겨있다.
Key-Value
형태로 다수의 정보를 넣을 수 있다.
- 등록된 클레임 (Registerd Claim)
토큰 정보를 표현하기 위해 이미 정해진 종류의 데이터
- iss: 토큰 발급자(issuer)
- sub: 토큰 제목(subject)
- aud: 토큰 대상자(audience)
- exp: 토큰 만료 시간(expiration), NumericDate 형식으로 되어 있어야 함 ex) 1480849147370
- nbf: 토큰 활성 날짜(not before), 이 날이 지나기 전의 토큰은 활성화되지 않음
- iat: 토큰 발급 시간(issued at), 토큰 발급 이후의 경과 시간을 알 수 있음
- jti: JWT 토큰 식별자(JWT ID), 중복 방지를 위해 사용하며, 일회용 토큰(Access Token) 등에 사용
- 공개 클레임 (Public Claim)
사용자 정의 클레임으로, 공개적 정보를 위해 사용됨
충돌 방지를 위해 URI 포맷 이용{ "https://velog.io/@minz-cha": true }
- 비공개 클레임 (Private Claim)
클라이언트와 서버 간 합의하에 사용되는 이름들 (데이터){ "user_id": "ming", "user_name": "minz", "age": 23, }
토큰을 인코딩하거나 유효성 검증을 할 때 사용하는 고유한 암호화 코드.
header
+ payload
정보를 비밀키로 해쉬를 하여 생성.
- 사용자가 id와 password를 입력하여 로그인 요청
- 해당 요청을 받은 서버는
회원 DB
에 접근하여 사용자 정보가 있는지 확인- 확인이 되면 서버는 로그인 요청을 확인하고, 토큰 발급
- 이를 클라이언트에 전달
- 클라이언트는 HTTP 요청 헤더에 JWT를 넣어 요청
- 서버는 별도의 인증과정 없이 헤더에 포함되어 있는 JWT 정보를 통해 인증
- 클라이언트 요청에 대한 응답과 요청 데이터 전달