하루하루는 성실하게 인생 전체는 되는대로

[JWT] JSON Web Token이란 본문

JAVA

[JWT] JSON Web Token이란

희롭 2022. 9. 10. 20:03

JWT

유저를 인증, 식별하기 위한 토큰 기반의 인증.

서버에 저장되는 세션과 달리, 토큰은 클라이언트에 저장되어 서버 부담 덜 수 있다.

토큰 자체에 사용자의 권한 정보, 서비스 사용정보가 포함된다. 따라서 데이터 많아지면 토큰도 커진다.

한번 발급된 이후 사용자 정보 바꾸더라도, 토큰 재발급하지 않는 한 반영되지 않는다.

JWT에는, 이름처럼 JSON 데이터를 Base64 URL-safe Encode를 통해 인코딩하여 직렬화한 것이 포함되며, 토큰 내부에는 위변조 방지 위해 개인키를 통한 전자서명도 존재한다.

 

RESTful과 같은 무상태(stateless) 환경에서 사용자 데이터를 주고 받을 수 있게 된다.

(세션의 경우, 쿠키 등을 통해 식별하고 서버에 세션 저장했지만, JWT 같은 토큰을 사용하면, 단순히 HTTP헤더에 토큰 첨부하는 것만으로도 데이터를 요청할 수 있다)

 

 

JWT 진행 순서

1. 클라이언트 사용자가 ID, PW 통해 웹서비스 인증

2. 서버에서 서명된 JWT를 생성해 클라이언트에 응답으로 돌려줌.

3. 클라이언트가 서버에 데이터를 추가적으로 요구할 때마다, HTTP Header에 JWT를 첨부

4. 서버에서 클라이언트로부터 온 JWT를 검증(JWT에 포함된 개인키 검증 등)

 

JWT 구조

1. Header

: JWT에서 사용할 type, hash알고리즘 종류

2. Payload

: 서버에서 첨부한 사용자 권한 정보, 데이터

3. Signature

: Header, Payload를 Base64 URL-safe Encode 한 이후 Header에 명시된 Hash함수 적용 후, 개인키로 서명한 전자서명을 담음.

=> 여기서 만든 전자서명은 Header, Payload가 변조되었는지 확인하기 위해 사용되는 중요 정보로써, JWT를 신뢰할 수 있는 토큰으로 사용할 근거가 됨.

=> 전자서명에는 비대칭 암호화 알고리즘 사용 (암호화-개인키, 복호화-공개키 사용)

 

JWT 인코딩/디코딩 체험

https://jwt.io/

 

JWT.IO

JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties.

jwt.io

 

Tips

payload에 ID, 사용자 등급을 같이 보내면, DB 조회하지 않아도 사용자 등급 바로 파악가능하다.

=> 즉, JWT 토큰은 DB조회 안해도 되는 장점! (서버에서 가장 피해야할 DB 조회)

Comments