IT 끄적이기/IT 지식
JWT ?
김팡
2024. 8. 2. 10:05
JWT (JSON Web Token)는 두 시스템 간에 안전하게 정보를 전달하기 위한 컴팩트하고 독립적인 방식의 토큰입니다.
JWT는 주로 인증 및 정보 교환 목적으로 사용됩니다.
JWT의 구조
JWT는 세 부분으로 구성된 문자열입니다. 이 세 부분은 마침표 .로 구분되며 각각의 부분은 다음과 같습니다:
- Header (헤더): JWT의 타입과 서명 알고리즘 정보를 포함합니다.
- Payload (페이로드): 토큰에 포함된 클레임(정보)을 담고 있습니다. 일반적으로 사용자 정보, 권한, 만료 시간 등이 포함됩니다.
- Signature (서명): 토큰의 무결성을 보장하기 위한 서명입니다. 헤더와 페이로드를 합쳐 비밀키로 서명한 값입니다.
예제 JWT
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
- Header: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
- Payload: eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
- Signature: SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
JWT 사용 사례
- 인증:
- 사용자가 로그인하면 서버는 사용자의 신원을 확인하고 JWT를 생성합니다.
- 클라이언트는 이 JWT를 저장하고 이후 요청 시마다 서버로 전송하여 인증을 받습니다.
- 서버는 JWT의 유효성을 검사하고, 토큰에 포함된 정보를 기반으로 요청을 처리합니다.
- 정보 교환:
- 두 시스템 간에 정보의 무결성을 보장하며 교환할 때 JWT를 사용할 수 있습니다.
- JWT는 서명되기 때문에, 정보가 변경되었는지 여부를 확인할 수 있습니다.
JWT의 장점
- 컴팩트: JWT는 작은 크기 때문에 URL 파라미터나 HTTP 헤더 등 다양한 장소에 쉽게 포함될 수 있습니다.
- 자체 포함: JWT는 필요한 정보를 자체적으로 포함하고 있어 별도의 데이터베이스 조회 없이도 토큰만으로 정보 처리 가능.
- 보안성: 서명된 토큰으로, 토큰의 무결성을 쉽게 확인할 수 있습니다. HMAC, RSA, ECDSA와 같은 알고리즘으로 서명됩니다.
JWT의 단점
- 토큰 크기: JWT는 기본적으로 클라이언트와 서버 간에 계속해서 전송되므로, 크기가 크면 성능에 영향을 줄 수 있습니다.
- 만료 시간 관리: JWT는 발급 시점에 만료 시간이 고정되므로, 만료된 토큰을 재발급하거나 관리하는 것이 필요합니다.
- 취소 불가: 한 번 발급된 JWT는 만료 전까지 취소할 수 없기 때문에, 발급된 토큰의 관리가 중요합니다.
JWT의 보안
- 서명: JWT는 서명된 상태로 전송되기 때문에 토큰이 조작되었는지 쉽게 검증할 수 있습니다.
- 암호화: 필요한 경우 JWT의 페이로드를 암호화하여 민감한 정보를 보호할 수 있습니다.