티스토리 뷰
JWT (JSON Web Token)
JWT는 JSON Web Token의 약자로, JSON 형식의 데이터를 안전하게 전송하기 위해 사용되는 토큰이다. 주로 클라이언트와 서버 간의 통신에서 인증과 권한 부여 목적으로 활용되며, 쿠키와 세션의 단점을 보완한다.
JWT는 암호화되어 있어 보안성이 뛰어나며, 서버가 별도의 상태를 저장하지 않는 Stateless 방식이기 때문에 확장성이 뛰어나다.
JWT의 구성
JWT는 세 가지 요소로 이루어진다.
- HEADER: 암호화 알고리즘 및 토큰 유형 정보를 포함한다.
- PAYLOAD: 사용자 정보 및 클레임(Claim, 데이터 조각)을 담고 있다.
- SIGNATURE: 토큰의 무결성을 보장하기 위한 서명(Signature)이다.
이 세 요소는 .(점)으로 구분되어 하나의 문자열로 인코딩된다.
JWT의 동작 방식
- 클라이언트가 서버에 인증 요청을 하면, 서버는 JWT를 생성하여 서명한 후 클라이언트에 전달한다.
- 클라이언트는 이후 요청 시, 이 JWT를 함께 전송한다.
- 서버는 JWT의 서명이 유효한지 검증한 후 요청을 처리한다.
JWT는 자체적으로 인증 정보를 포함하고 있으므로, 서버에서 별도의 세션을 관리할 필요가 없다.
JWT의 활용
- 인증(Authentication): 로그인 후 발급된 JWT를 이용하여 사용자를 인증한다.
- 권한 부여(Authorization): 사용자 역할(Role)이나 권한을 포함하여 특정 API 접근을 제어할 수 있다.
- 정보 교환: 클라이언트와 서버 간에 신뢰할 수 있는 방식으로 정보를 주고받는 데 사용된다.
JWT의 보안 고려 사항
- 비밀키 관리: 서명(Signature)에 사용되는 키는 .env 파일 등을 이용해 안전하게 보관해야 한다.
- 만료 시간 설정: 보안을 위해 토큰의 유효 기간을 설정하고 주기적으로 갱신하는 것이 중요하다.
- HTTPS 사용: 네트워크에서 JWT가 탈취되는 것을 방지하기 위해 반드시 HTTPS를 사용해야 한다.
- Payload의 민감 정보 보호: Payload는 Base64 인코딩된 형태로 누구나 디코딩할 수 있으므로, 민감한 정보를 직접 저장하면 안 된다.
