JWT(JSON Web Token)
- 인증에 필요한 정보들을 암호화시킨 JSON 토큰을 의미.
- Access Token을 HTTP헤더에 실어 서버가 클라이언트를 식별하는 방식.
- JWT는 JSON 데이터를 Base64 URL-safe Encode 를 통해 인코딩하여 직렬화한 것
JWT 구조
Header
{
"alg":"HS256",
"type":"JWT"
}
- alg : 서명 암호화 알고리즘(ex: HMAC SHA256, RSA)
- typ : 토큰 유형
Payload
토큰에서 사용할 정보의 조각들인 Claim 이 담겨있다. (실제 JWT 를 통해서 알 수 있는 데이터)
서버와 클라이언트가 주고받는 시스템에서 실제로 사용될 정보에 대한 내용을 담고있다.
key-value 형식으로 이루어진 한 쌍의 정보를 Claim이라고 칭한다.
{
"sub":"1234567890",
"name":"John Doe",
"iat":"20240321010900"
}
- 페이로드는 정해진 데이터 타입은 없지만, 대표적으로 Registered claims, Public claims, Private claims 이렇게 세 가지로 나뉜다.
- Registed claims : 미리 정의된 클레임.
- iss(issuer; 발행자),
- exp(expireation time; 만료 시간),
- sub(subject; 제목),
- iat(issued At; 발행 시간),
- jti(JWI ID)
- Public claims : 사용자가 정의할 수 있는 클레임 공개용 정보 전달을 위해 사용.
- Private claims : 해당하는 당사자들 간에 정보를 공유하기 위해 만들어진 사용자 지정 클레임. 외부에 공개되도 상관없지만 해당 유저를 특정할 수 있는 정보들을 담는다
Signature
시그니처에서 사용하는 알고리즘은 헤더에서 정의한 알고리즘 방식(alg)을 활용한다.
시그니처의 구조는 (헤더 + 페이로드)와 서버가 갖고 있는 유일한 key 값을 합친 것을 헤더에서 정의한 알고리즘으로 암호화를 한다.
Access Token
- Access Token은 접근에 관여하는 토큰이다.
Refresh Token
- Refresh Token은 재발급에 관여하는 토큰이다.
- 서버에서는 Refresh Token만 저장한다.
※참고 블로그
'프로그래밍 > etc' 카테고리의 다른 글
OAuth2.0 플로우 정리 (0) | 2024.09.04 |
---|---|
객체지향의 4가지 특징 (0) | 2024.01.21 |
알고리즘 순서도를 작성하는 습관을 들이자 (0) | 2024.01.07 |