JWT
JWT 란?
서버에서 전자 서명된 토큰을 이용하면 인증에 따른 스케일 문제를 해결할 수 있다.
전자 서명 토큰 중 하나가 JWT(JSON Web Token)이다.
기존 토큰 기반 인증과 차이점은 서버가 헤더와 페이로드를 생성한 후 전자 서명을 한다는 점이다.
JSON 형태의 토큰으로 {header}.{payload}.{signature}로 구성되어있고, 토큰 기반 인증이므로 서버가 생성한다.
1. JWT 장점
사용자 인증에 필요한 모든 정보는 토큰 자체에 포함하기 때문에 별도의 인증 저장소가 필요 없고,
MSA 환경에서 인증 서버와 데이터베이스에 의존하지 않는 쉬운 인증 및 인가 방법을 제공한다.
MSA(micro service architecture) 란?
소프트웨어가 잘 정의된 API를 통해 통신하는 소규모의 독립적인 서비스로 구성되어 있는 경우의 소프트웨어 개발을 위한 아키텍처 및 조직적 접근 방식입니다.
참고 URL : https://aws.amazon.com/ko/microservices/
- JSON 웹 토큰의 사용을 권장하는 이유
- URL 파라미터와 헤더로 사용
- 수평 스케일이 용이
- 디버깅 및 관리가 용이
- 트래픽 대한 부담이 낮음
- REST 서비스로 제공 가능
- 내장된 만료
2. JWT 단점
- 토큰은 클라이언트에 저장되어 데이터베이스에서 사용자 정보를 조작하더라도 토큰에 직접 적용할 수 없다.
- 더 많은 필드가 추가되면 토큰이 커질 수 있다.
- 비 상태 애플리케이션에서 토큰은 거의 모든 요청에 대해 전송되므로 데이터 트래픽 크기에 영향을 미칠 수 있습니다.
3. JWT 구성
Authorization: Bearer {header}.{payload}.{signature}
{ // header
"typ":"JWT",
"alg":"HS512",
}.
{ // payload
"sub": "40288093784915d201784916a40c001",
"iss":"demo app",
"iat":1595733657,
"exp":1596597657
}.
Nn4d1MOVLZg79sfFACTIpCPKqWmpZMZQ.....
// signature
3-1) Header
- typ : Type을 줄인 말로 토큰의 타입을 의미
- alg : Alogrithm을 줄인 말로 토큰의 서명을 발행하는 데 사용된 해시 알고리즘의 종류를 의미
3-2) Payload
- sub : Subject를 줄인 말로 토큰의 주인을 의미 sub는 ID처럼 유일한 식별자여야 한다.
- iss : Issuer를 줄인 말로 토큰을 발행한 주체를 의미 예를 들어 우리 앱에서 토큰을 발행했다면 demo app, 페이스북이 발행했다면 facebook이 된다.
- iat : issued at을 줄인 말로 토큰이 발행된 날짜와 시간을 의미
- exp : expiration을 줄인 말로 토큰이 만료되는 시간을 의미
3-3) Signature
- 토큰을 발행한 주체 Issuer가 발행한 서명으로 토큰의 유효성 검사에 사용된다.
* 토큰을 훔쳐갈 수 있기 때문에 반드시 HTTPS 통신을 해야 한다 *
반응형
'Java' 카테고리의 다른 글
[Spring Boot] Spring Security 패스워드 암호화 방법 (0) | 2022.10.26 |
---|---|
[Spring Boot] Spring Security JWT를 사용한 토큰 인증 구현 (0) | 2022.10.25 |
[Spring Boot] Rest API 개념 및 작성 방법 (0) | 2022.10.10 |
[Spring Boot] REST API 구현(2) DTO, Service, Controller 개념 및 작성 방법 (0) | 2022.10.09 |
[Spring Boot] REST API 구현(1) JPA Entity, Repository 개념 및 작성 방법 (1) | 2022.10.08 |