JWT(Json Web Token)란?
- Json 포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim 기반의 Web Token이다.
- 일반적으로 클라이언트와 서버 사이에서 통신을 할 때 권한을 위해 사용하는 토큰이다.
- 토큰 자체를 정보로 사용하는 Self-Contained 방식으로 정보를 안전하게 전달한다.
JWT 구성 요소
- 헤더(header), 페이로드(payload), 서명(signature) 세 파트로 나뉘어져있다.
- Json 형태이며 각 부분은 Base64Url로 인코딩 되어있다.
- 각가의 부분을 이어주기 위해 . 구분자를 사용하여 구분한다.
- 어떠한 알고리즘으로 암호화 할 것인지, 어떠한 토큰을 사용할 것 인지에 대한 정보가 들어있다.
페이로드(payload)
- 전달하려는 정보가 들어있는데 정보라는 것은 사용자 ID나 다른 데이터들을 말하며, 이것을 클레임이라고 한다.
- 페이로드에 있는 정보는 수정 및 추가가 가능하다.
- 노출이 되어있고 수정이 가능한 지점기 때문에 인증이 필요한 최소한의 정보만이 담겨져있다.
서명(signature)
- JWT중에 가장 중요한 부분으로 헤더와 페이로드의 값을 BASE64Url로 인코딩한다.
- 인코딩한 값을 발급해준 서버가 지정한 secret key로 암호화 시켜 토큰을 변조하기 어렵게 만들어준다.
JWT의 동작 원리
- 사용자가 ID와 Password를 입력하여 로그인 요청을 한다.
- 서버는 DB에 회원 정보가 있는 사용자인지 확인한다.
- 확인이 되면 서버는 로그인 요청 확인 후, secret key를 통해 토큰을 발급한다.
- 토큰을 클라이언트에게 전달한다.
- 서비스 요청과 권한을 확인하기 위해서 헤더에 데이터(JWT) 요청을 한다.
- 데이터를 확인하고 JWT에서 사용자 정보를 확인한다.
- 클라이언트 요청에 대한 응답과 요청한 데이터를 전달해준다.
Reference
Blog
Blog