JWT(Java Web Token)란?
정의
URL-safe 모드로 전자서명된 JSON
JWT 인증 방법
서버와 클라이언트 간 정보를 주고 받을 때, HTTP Request Header에 Json 토큰을 넣은 후 서버는 별도의 인증 과정 없이 Header에 포함되어 있는 JWT 정보를 통해 인증함
JWT 서명 방법
HMAC 알고리즘을 사용하여 비밀키 또는 RSA를 이용한 Public Key/Private Key 쌍으로 서명가능하다
JWT 구성
header , payload, sinature
- Header : 토큰 타입(JWT로 표시), 해시 암호화 알고리즘(HMAC 등)
- Payload : 다수의 Claim(정보의 한조각, name/value로 구성)
- Signature
JWT 프로세스
- 사용자가 ID와 Password를 입력하여 로그인을 시도
- Server는 요청을 확인하고 Scret key를 통해 Access token을 발급
- JWT를 clinet에 전달
- Client에서 API를 요청할 때마다 Client가 Authentication Header에 Access token을 담아서 보냄
- Server는 JWT Sinature를 체크하고 Payload로부터 사용자 정보를 확인
- Client의 요청 서비스를 처리(ex. 데이터를 전송해줌)
JWT 장점과 단점
JWT 장점
주요 이점: 사용자 인증에 필요한 모든 정보는 토큰 자체에 포함하기 떄문에 별도의 인증 저장소가 필요없다
- URL 파라미터와 헤더로 사용
- 수평 스케일이 용이
- 디버깅 및 관리가 용이
- 트래픽에 대한 부담이 낮음
- Rest 서비스로 제공 가능
- 내장된 만료
- 독립적인 JWT
JWT 단점
- 토큰은 client 위치에 저장되어 DB의 사용자 정보를 조작하더라도 토큰에 직접 변경한 정보를 적용할 수 없다
- 더 많은 필드가 추가되면 토큰이 커질 수 있다
- stateless App에서 토큰은 거의 모든 요청에 대해 전송되므로 데이터 트래픽 크기에 영향을 미칠 수 있다
JWT가 유용한 상황
- 회원인증
- 정보 교류
- MSA 환경(MSA 서비스 인증, 인가)
참고 사이트)
http://www.opennaru.com/opennaru-blog/jwt-json-web-token/