JWT(JSON Web Token)
● 클라이언트와 서버 간 정보를 안전하게 주고받기 위해 사용하는 표준 토큰입니다.
● 사용자의 정보를 JSON 객체로 안전하게 전송하는 간편하며 개방적인 토큰입니다.
● 디지털 서명이 되어 있기 때문에 신뢰성이 보장됩니다.
● HMAC 알고리즘, RSA, ECDSA를 사용한 공개/비밀 키 페어를 사용하여 서명합니다
● JWT에는 두 가지의 유형이 있습니다.
○ JWS(JSON Web Signature)
- 클레임의 내용은 누구나 읽을 수 있지만 서명이 있기 때문에 데이터의 무결성을 보장합니다.
클레임이 무엇인지 설명해주세요. - iss(issuer), exp(expiration time), sub(subject), aud(audience) 등 사용자에 대한 정보나 토큰에 대한 속성을 key-value 형태로 저장한 것입니다. |
○ JWE(JSON Web Encryption)
- 클레임 자체를 암호화하며, 복호화 방법을 알고 있는 사용자만이 Payload를 읽을 수 있습니다.
JWT의 구성은 3가지
● Header, Payload, Signature 이렇게 3가지로 나누어집니다.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. // 헤더
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ. // 페이로드
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c // 서명
○ Header는 토큰의 타입과 서명 알고리즘의 정보를 가지고 있습니다.
- JSON으로 표현된 헤더를 Base64로 인코딩한 것입니다.
○ Payload는 사용자 정보나 클레임(ex:iss, sub, exp, aud 등)이 키-값(key-value)로 포함된 부분입니다.
- JWS 방식에서는 Payload도 Base64로 인코딩합니다. 이 부분은 누구나 디코딩이 가능하기 때문에
JWS Payload에는 민감한 정보를 포함이 되어서는 안됩니다.
- JWE 방식에서는 Payload를 안전한 알고리즘과 비밀 키로 암호화하기 때문에 민감한 정보를 포함해도
문제가 없습니다.
○ Signature는 Header와 Payload를 결합한 후 지정된 알고리즘과
비밀 키 또는 공개 키로 서명한 값입니다.
- JWT의 무결성을 보장하며, 데이터가 변경되지 않았음을 확인할 수 있습니다.
- 인코딩한 Header, Payload를 Header에서 정의한 알고리즘에 의해 비밀 키(secret key)로 암호화합니다.
- key로만 복호화할 수 있기 때문에 토큰의 전송자와 내용의 무결성을 보장합니다.
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
JWT의 장점이라 하면...
● 독립적(Stateless)으로 작동합니다. 필요한 정보를 모두 자체적으로 가지고 있기 때문에 서버에서 세션을
저장할 필요가 없습니다. 서버는 부하를 줄일 수 있으며 확장성을 확보할 수 있습니다.
● 무결성이 보장됩니다. JWS를 통해 토큰이 변조되지 않았음을 증명할 수 있고, JWE는 Payload를 암호화하기
때문에 데이터의 기밀성까지 보장할 수 있습니다.
● 간결(Compact)하고, URL에서 안전하게 사용 가능합니다. 모바일 기기 및 애플리케이션에서 클라이언트가
편리하게 파싱하고 이용할 수 있습니다.
참고자료
'Develop Diary > Interview' 카테고리의 다른 글
[Interview] var, let, const에 대해 설명해주세요 (0) | 2025.02.13 |
---|---|
[Interview] NoSQL이란 무엇인가요? (0) | 2025.02.12 |
[Interview] 깊은 복사와 얕은 복사에 대해서 설명해주세요 (0) | 2025.02.06 |
[Interview] Hoisting에 대해서 설명해주세요 (0) | 2025.02.05 |
[Interview] BigO가 무엇인지 설명해주세요 (0) | 2025.02.04 |