JWT란 무엇인가?
JWT(Json Web Token)는 JSON 객체를 사용하여 정보를 안전하게 전달하기 위한 컴팩트하고 독립적인 방식입니다.
주로 인증 및 정보 교환에 사용됩니다. JWT는 세션을 서버에 저장하지 않고 클라이언트 측에서 상태를 유지할 수 있게 합니다.
JWT의 구조
JWT는 헤더(Header), 페이로드(Payload), 서명(Signature) 세 부분으로 구성됩니다.
헤더(Header):
- 토큰 유형과 해싱 알고리즘 정보를 포함합니다.
- 여기서
alg
는 서명에 사용되는 알고리즘(예: HMAC SHA256)을 나타내고,typ
는 토큰의 유형을 나타냅니다(JWT).
페이로드:
사용자 정보와 기타 클레임(claim)들을 포함합니다.
클레임은 JWT에 담기는 정보의 조각들로,등록된 클레임, 공개 클레임, 비공개 클레임으로 나눌 수 있습니다.
- 등록된 클레임: 토큰의 표준화된 정보를 나타내는 클레임들로, 예를 들어
iss
(발급자),exp
(만료 시간),sub
(주제) 등이 있습니다. - 공개 클레임: 충돌이 나지 않도록 주의해야 하는 클레임들로, 예를 들어 사용자의 역할, 사용자 ID 등이 있습니다.
- 비공개 클레임: 발급자와 수신자 사이에 협의된 클레임들로, 예를 들어 특정 비즈니스 로직을 위한 데이터 등이 있습니다.
서명: 토큰의 무결성을 확인하는 데 사용됩니다. 헤더와 페이로드를 인코딩한 후, 비밀키를 사용하여 서명됩니다.
JWT의 작동 방식
JWT는 서버에서 발급되고 클라이언트가 이를 저장하여 요청 시 서버에 전달합니다. 서버는 토큰의 서명을 검증하여 요청이 유효한지 확인합니다.
사용 사례
- 사용자 인증: 사용자가 로그인하면 JWT가 발급되어 클라이언트에 저장됩니다.
- 정보 교환: JWT를 사용하여 두 파티 간에 안전하게 정보를 교환할 수 있습니다.
보안 고려 사항
JWT를 사용할 때는 보안을 철저히 고려해야 합니다.
- 비밀키 관리: 서명을 검증하는 비밀키는 안전하게 관리해야 합니다.
- 짧은 만료 시간: 토큰의 만료 시간을 짧게 설정하여 만료된 토큰이 악용되지 않도록 합니다.
장점과 단점
장점:
- 상태를 클라이언트 측에서 관리할 수 있어 서버 부하 감소
- 다양한 시스템 간에 쉽게 사용 가능
단점:
- 만료 전까지 유효하므로 유출 시 위험
- 페이로드가 암호화되지 않으므로 민감한 정보는 포함하지 않음