JWT란?
- 인터넷 표준으로, 간단한 JSON 객체를 사용하여 정보를 안전하게 전송하기 위한 방법.
- 주로 인증 및 정보교환에 사용되며 구조와 작동 방식을 이해하는 것이 중요.
구성 요소
: 토큰의 타입과 사용된 해시 알고리즘을 지정. JSON 형식으로 사용되며, Base64로 인코딩된다.
-> 토큰이 어떤 방식(알고리즘)으로 보호되고 있는지 알려준다.
2. 페이로드(Payload)
: 토큰에 포함될 클레임을 담고 있다. 클레임은 토큰에 대한 정보를 포함한다. 이 역시 JSON 형식으로 작성되고 Base64로 인코딩 된다.
3. 서명(Signature)
: 서버의 비밀 키를 사용하여 헤더와 페이로드를 서명한다. 이 서명은 토큰이 중간에 변경되지 않았는지 검증하는데 사용.
작동 방식
1. 토큰 생성
: 사용자가 시스템에 로그인할 때, 서버는 사용자의 정보를 포함하는 JWT 생성. 이 토큰을 서명하고 사용자에게 전달.
2. 토큰 전송
: 사용자는 이후 요청에 이 토큰을 포함하여 서버에 전송.
3. 토큰 검증 및 사용
: 서버는 받은 토큰의 서명을 검증하고, 유효하면 페이로드를 읽어 사용자의 요청을 처리한다.
장점
- 자가 포함 : 필요한 모든 정보를 자체적으로 갖고 있어 별도의 데이터베이스 조회 없이 검증이 가능하다.
- 보안성 : 디지털 서명이 있어 데이터 위변조를 방지할 수 있다.
- 확장성 : 다양한 시스템고 언어에서 사용 가능하다.
단점
- 토큰 크기 : 페이로드에 많은 정보를 담으면 토큰의 크기가 커질 수 있으며, 이는 네트워크 대역폭에 영향을 줄 수 있다.
- 보안 문제 : 토큰이 탈취되면 정보가 노출될 수 있으므로 HTTPS와 같은 안전한 채널을 통한 전송이 필수이다.