JWT(JSON Web Token)
- 웹 표준으로써 데이터의 JSON 객체를 사용하여 가볍고 자가 수용적인 방식으로 정보를 안전하게 전달할 수 있도록 설계된 토큰 기반 인증 방식이다.
- JWT는 URL, HTTP Header, HTML Form과 같은 다양한 방식으로 전달할 수 있으며, 서버와 클라이언트 간의 인증 정보를 포함한다.
- JWT는 Header, Payload, Signature 세 부분으로 구성된다.
- Header는 JWT의 타입과 암호화 알고리즘 등을 포함하며, JSON 형식으로 인코딩 된다.
- Payload는 클레임 정보를 포함하며, JSON형식으로 인코딩 된다.
- 클레임 정보는 사용자 ID, 권한 등의 정보를 포함할 수 있다.
- Signature는 Header와 Payload를 조합한 후, 비밀 키를 사용하여 생성된 서명 값이다. 서명 값은 토큰의 무결성을 보장하며, JWT를 조작하지 않았다는 것을 검증한다.
JWT 토큰을 통한 인증 과정
- 클라이언트가 서버에 로그인 요청을 보낸다.
- 서버는 로그인 요청을 검증하고, 유효한 사용자라면 JWT를 생성하여 클라이언트에게 반환한다.
- 클라이언트는 이후 요청에 JWT를 포함시켜 전송한다.
- 서버는 JWT를 검증하여, 클라이언트의 인증 여부를 판단한다.
장점과 단점
- 장점
- 토큰 인증 방식이므로, 서버 측에서 별도의 세션 저장소를 유지할 필요가 없다.
- JSON 형식으로 인코딩 되므로, 다양한 플랫폼 간에 전송 및 구현할 수 있다.
- Signature를 사용하여 무결성을 보장하므로, 토큰이 변조되었는지 여부에 대해 쉽게 검증할 수 있다.
- 단점
- JWT의 크기가 커질 경우, 네트워크 대역폭이 증가하게 된다.
- JWT는 한 번 발급된 후에는 내부 정보를 수정할 수 없으므로, 만료 시간을 짧게 설정해야 된다.
- JWT를 탈취당하면, 해당 토큰을 사용한 모든 요청이 인증되므로, 보안에 위협이 될 수 있다. 따라서, HTTPS와 같은 보안 프로토콜을 사용하여 JWT를 전송해야 한다.