JWT(JSON Web Token)은 당사자 간 정보를 안전하게 전송할 수 있는 방법을 JSON 객체로 정의한 개방형 표준(RFC 7519)입니다.
이 정보는 디지털 서명을 사용하기 때문에 데이터 위/변조를 검증할 수 있으며, 신뢰할 수 있습니다.
JWT는 (HMAC 알고리즘으로) 비밀 또는 RSA 또는 ECDSA를 사용하는 공용키/비밀키 쌍을 사용하여 서명할 수 있습니다.
서명된 토큰은 그 안에 포함된 클레임의 무결성을 검증할 수 있는 반면,
암호화된 토큰은 그러한 클레임을 다른 당사자로부터 숨길 수 있습니다.
토큰이 공용/비밀 키 쌍을 사용하여 서명될 때, 서명은 또한 개인 키를 가진 당사자만이 서명한 당사자임을 인증할 수 있습니다.
- 권한 부여: JWT를 사용하기 위한 가장 일반적인 사용처입니다.
사용자가 로그인하면 이후의 각 요청에는 JWT가 포함되어 사용자가 해당 토큰으로 허용된 경로,
서비스 및 리소스에 액세스할 수 있습니다.- 정보 교환: JSON 웹 토큰은 당사자 간에 정보를 안전하게 전송하는 좋은 방법입니다.
JWT는 예를 들어 공용/개인 키 쌍을 사용하여 서명할 수 있기 때문에 보낸 사람이 자신이 누구인지 확인할 수 있습니다.
또한 헤더와 페이로드를 사용하여 서명을 계산하므로 내용이 조작되지 않았는지 확인할 수도 있습니다.
JWT를 이용한 인증 동작방식 예제를 통해 JWT 동작 원리를 알아보겠습니다.
- 클라이언트에서 id, pw 정보를 서버로 보냄
- 서버에서 id, pw 정보를 이용하여 JWT token 을 생성함
- 서버에서 클라이언트로 JWT token 을 보냄
- 클라이언트에서 서버로 서비스 요청시, JWT token 을 같이 보냄.
- 서버에서 서비스 처리시, JWT token 을 검증, 일치하면 서비스를 동작시켜 클라이언트로 응답