🔮
JWT 구조 - JWT Structure & 장점
May 12, 2022
JWT - Json Web Token
해당 내용은 메타코딩 - 스프링부트 시큐리티 강의를 들으며 정리한 내용입니다.
JWT는 Json Web Token으로 Web에서 Json 객체로 정보를 안전하게 전송하기 위한 개방형 표준(RFC 7519)이다.
⚒ 여기에서 RFC란 여러 내부망들이 서로 연결할 때, 서로 약속된 규칙으라고 생각하면 된다.
JWT는 언제 사용할까?
1️⃣ : 권한 부여 로그인하면 JWT를 부여하고 후속 요쳥에는 JWT가 포함되어 사용자가 해당 토큰으로 인증을 받는 방식이다.
2️⃣ : 정보 교환 JWT는 정보를 안전하게 전송하는 좋은 방법이다. RSA 방식을 사용하여 JWT에 서명할 수 있기 때문에 발신자가 누구인지 알 수 있고, Header와 Payload를 사용해 Signature를 만들기 때문에 위조 여부도 판단할 수 있다.
JWT 구조
설명에 앞서 Claim은 정보를 담는 조각 단위로 생각하면 된다.
xxxxx.yyyyy.zzzzz
xxxxx : Header
yyyyy : Payload
zzzzz : Signature
💥 Header : 토큰 유형, 서명 알고리즘
ex) { "alg" : "HS256", "typ" : "JWT" }
💥 Payload : 엔티티(사용자) 및 추가 데이터에 대한 설명
세 가지 종류의 Claim이 존재한다.
1️⃣ Registered : 이미 정의된 클레임으로 권장되는 정보들이 해당된다. ex) sub(제목), aud(대상자), exp(만료시간) etc... [3글자이다] 2️⃣ Public : 마음대로 정의할 수 있지만, 충돌 방지된 이름 필수 3️⃣ Private : 정보를 공유하기 위한 사용자 지정 Claim이다. ex) "username" : "testId"
💥 Payload : 엔티티(사용자) 및 추가 데이터에 대한 설명
Encoding된 Header와 Encoding된 Payload 그리고 Secret Key, 서명 알고리즘(HMAC, RSA)를 이용해 구성한다. 아래와 같다.
``` HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret) ```
Header, Payload, Signature 를 종합해 보면 다음과 같다.
![JWT 구조](https://cdn.auth0.com/content/jwt/encoded-jwt3.png)
header부분은 header에 해당하는 값이 인코딩 된 값이고,
Payload는 Payload에 해당하는 값이 인코딩 된 값이며,
Signature는 모두 종합한 값을 해쉬한 값을 인코딩한 값이 된다.
아래 그림과 같다.
JWT 작동
JWT는 Bearer 스키마를 사용해 헤더의 Authorization에서 보내야 한다. ``` Authorization: Bearer
🌟 JWT 로그인 방식
JWT 로그인 장점
Session Login 단점을 극복할 수 있다.
1️⃣ 더이상 Client-Server 간 상태 정보가 존재하지 않는다 - Stateless
2️⃣ Stateless로 인해 서버 확장에 용이해진다
3️⃣ 다른 어플리케이션으로 인증 정보 전달 가능하다 - 멀티 디바이스 가능, Open API를 통해 로그인 연동 가능
4️⃣ 세션 관리하지 않아 효율적이다
참고 자료
💥끝!!
✨ 잘못된 부분은 많은 조언 및 지적 부탁드립니다. - JunHyxxn