728x90
반응형
Overview
JWT(JSON Web Tokens)에 대해서 알아본다.
JWT(JSON Web Tokens)란?
JSON 웹 토큰(JWT) 은 두 당사자 간에 전송될 클레임을 나타내는 URL 안전 방식의 간결한 수단이다. JWT 내의 클레임은 JSON 객체로 인코딩되며, JSON 웹 서명(JWS)을 사용하여 디지털 서명된다. 선택적으로, JSON 웹 암호화(JWE)를 사용하여 암호화할 수도 있다.
구조
JWT는 일반적으로 헤더(Header), 페이로드(Payload), 서명(Signature)의 세 부분으로 구성되며, 점(.)으로 구분됩니다. 그 구조는 `header.payload.signature` 이다.
- 헤더(Header): 헤더는 보통 토큰의 유형(JWT)과 사용되는 서명 알고리즘(예: HMAC SHA256 또는 RSA)의 두 부분으로 구성된다.
{
"alg": "HS256",
"typ": "JWT"
}
- 페이로드(Payload): 페이로드에는 클레임이 포함됩니다. 클레임은 엔티티(보통 사용자)에 대한 진술과 추가 데이터입니다. 등록된 클레임, 공개 클레임, 개인 클레임의 세 가지 유형이 있다.
- 등록된 클레임(Registered Claims): 이들은 필수는 아니지만 유용한 상호 운용 클레임 세트를 제공하기 위해 미리 정의된 클레임 세트이다. 일부는 iss(발급자), exp(만료 시간), sub(주제), aud(대상자) 등이다.
- 공개 클레임(Public Claims): JWT를 사용하는 이들이 원하는 대로 정의할 수 있다. 그러나 충돌을 피하기 위해 IANA JSON 웹 토큰 레지스트리에 정의되거나 충돌 방지 네임스페이스를 포함하는 URI로 정의되어야 한다.
- 개인 클레임(Private Claims): 동의하는 당사자 간에 정보를 공유하기 위해 생성된 사용자 정의 클레임으로, 등록되지 않았거나 공개 클레임이 아니다.
{
"sub": "1234567890",
"name": "John Doe",
"admin": true,
"iat": 1516239022
}
- 서명(Signature): 서명 부분을 생성하려면, 인코딩된 헤더와 인코딩된 페이로드, 비밀키, 헤더에 명시된 알고리즘을 사용하여 서명해야 한다. 예를 들어, HMAC SHA256 알고리즘을 사용하는 경우, 서명은 다음과 같은 방식으로 생성된다.
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
JWT의 작동 방식
- 인증(Authentication): 사용자가 로그인한 후, 각 후속 요청에는 JWT가 포함되어, 해당 토큰으로 허용된 경로, 서비스 및 리소스에 접근할 수 있다.
- 정보 교환(Information Exchange): JWT는 예를 들어 공개/개인 키 쌍을 사용하여 서명할 수 있기 때문에, 발신자가 그들이 주장하는 사람인지 확신할 수 있다. 또한, 서명은 헤더와 페이로드를 사용하여 계산되므로, 내용이 변경되지 않았는지도 검증할 수 있다.
JWT Debugger
JWT 공식 사이트에서 JWT Debugger를 통해 HEADER, PAYLOAD, VERIFY SIGNATURE 값을 확인할 수 있다.
Reference
https://github.com/somaz94/DevOps-Engineer/wiki/KR_IT%EC%9A%A9%EC%96%B4
728x90
반응형
'IT 용어' 카테고리의 다른 글
[IT 용어 5.] CI/CD란? (2) | 2024.11.25 |
---|---|
[IT 용어 4.] Semantic Versioning (SemVer)란? (0) | 2024.11.23 |
[IT 용어 2.] 어플라이언스(Appliance)란? (4) | 2024.11.17 |
[IT 용어 1.] Devops, SRE, Cloud/System Engineer (8) | 2024.11.14 |