JSON Web Token의 약자이다.
기존 방식인 Basic Auth는 요청마다 아이디 및 비밀번호로 로그인 정보를 매번 네트워크를 통해 전송해야 하고, 한 요청을 처리하는데 인증을 무리하게 많이 하여 성능도 많이 떨어진다. 따라서 JWT를 사용하는데 과연 뭐가 좋을까?
JWT는 Header, Payload, Signature 로 구성되어 있다.
Header
-typ : 타입
-alg : 알고리즘
Payload
-sub: 토큰의 주인(클라이언트 자신)
-iss: 토큰 발행자
-iat: 토큰 발생시기
-exp: 토큰 만료기간
Signature
토큰 발행자가 발행한 서명. 토큰의 유효성 검사를 위해 사용된다.
JWT는 사용자가 회원가입 후 로그인을 하게되면 유저의 정보를 활용하여 {헤더}.{페이로드}를 작성하고, 시크릿 키로 전자서명을 생성한다. ex) 전자서명:X
위 내용을 토대로 {헤더}.{페이로드}.X 를 Base64로 인코딩 후 반환한다.
이후 HTTP 요청을 통해 유저가 토큰을 서버로 전달하면, 서버는 유저에게서 받은 토큰을 Base64로 디코딩하여 {헤더}.{페이로드}.전자서명(X)을 얻는다. 이후 전자서명 X를 제외한 앞 부분을 떼어내어 시크릿 키로 전자서명을 작성한다.
ex) 전자서명 Y.
유저에게서 받았던 전자서명 X와 방금 다시 작성한 전자서명 Y가 일치하면 검증이 완료된다.
단, 중간에 토큰을 누가 훔쳐가면 당연히 해당 계정의 리소스에 접근할 수 있게 된다.
따라서 HTTPS와 함께 사용하여야 한다.