Notice
Recent Posts
Recent Comments
Link
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Archives
Today
Total
관리 메뉴

코딩하는 바나나

[BackEnd] JWT 본문

Web

[BackEnd] JWT

유기농바나나칩 2022. 4. 13. 22:14

JWT

JWT는 웹 개발을 하다보면 꼭 필요한 녀석이라고 한다. 보통 사용자 인증/인가에 사용된다고 한다.

Jason Web Token의 약자이다. 서버에 접속하는 사용자를 인증을 위해 사용하는 Jason 기반의 암호화된 토큰이다. JWT를 request에 담아서 보낸다.

 

JWT 구성

JWT는 세가지 요소로 구성된다. 각 요소는 aaaa.bbbbb.cccc와 같이 . 으로 구분된다. 그리고 이는 url에서 사용 할 수 있도록 Base64url 인코딩을 사용한다고 한다. 각 요소는 Jason 형태로 저장이 되어있다.

 

JWT의 첫번째 요소는 header이다. 여기에는 토큰의 타입과 해시 암호화 알고리즘으로 구성되어있다.

 

JWT의 두번째 요소는 payload이다. 여기에는 토큰에 담을 정보가 들어있다. 여기에 담긴 정보의 한 조각은 'claim'이라고 한다. claim의 종류로 등록된 claim, 공개 claim, 비공개 claim이 존재합니다.

 

JWT의 마지막 요소는 signature이다. signature는 header와 payload의 내용이 서버의 개인키로 암호화 되어있다. 따라서 이 토큰을 가지고 클라이언트가 서버에 요청을 보내면 서버는 signature를 개인키로 복호화하여 인증과정을 거치게 된다.

 

JWT의 장점

Stateless
보통 이런 클라이언트의 인증 과정은 쿠키나 세션을 통해서 이루어진다. 하지만 JWT를 이용하면 이런 저장소에 값을 따로 저장해 둘 필요 없이 인증을 할 수 있다. 이렇게 토큰 기반으로 구현하게 되면 stateless하게 구현을 할 수있다. 즉 서버는 클라이언트의 상태를 저장해 놓지 않는 다는 것이다. 기존 세션을 사용한다면 서버가 여러대인 경우 클라이언트는 자신의 세션정보를 가지고 있는 서버와만 통신을 해야 한다. JWT로 구현을 하면 서버가 사용자의 상태를 저장하지 않기 때문에(stateless 하기때문에) 어떤 서버로 접속을 해도 상관이 없다.

 

JWT의 단점

토큰의 길이
claim에 넣는 데이터가 많아질 수록 JWT토큰의 길이도 길어진다. 이러면 네트워크 대역폭 낭비가 심할 수 있다.

보안
JWT는 payload에 대한 정보를 암호화 하지않고 단지 base64로만 인코딩 할 뿐이어서 중간에 패킷이 가로채졌을 경우 디코딩만 하면 데이터을 볼 수있다. 따라서 보안에 민감한 정보는 담지 않아야한다. 

 

JWT 사용 상황

회원인증
사용자가 로그인을 하면 서버가 사용자 정보를 기반으로 토큰을 발급한다. 그후 사용자가 서버에 요청을 할 때 마다 JWT를 포함하여 요청을 한다. 그러면 서버는 따로 세션을 유지 할 필용없이 해당 토큰이 유효한지 만 검사하면 된다. 서버의 자원과 비용을 절감 할 수 있다.

정보 교류
두 개체 사이에서 정보 교류 할 때 이용하기 용이하다. 왜냐하면 signature를 이용하기 때문에 정보가 도중에 조작되었는지 정보를 보낸 사람이 바뀌진 않았는지를 검증 할 수 있기 떄문이다.

 

https://tech.toktokhan.dev/2021/04/30/JWT/

 

JWT란 무엇인가

JWT 안녕하세요 똑똑한 개발자에서 백엔드 개발을 하고 있는 김영환 입니다. JMT졸맛탱이 아니라 JWT😝 웹 개발을 진행하다보면 빠질수 없는 인증 / 인가 .. JWT에 대해서 소개해보도록 하겠습니다.

tech.toktokhan.dev

 

'Web' 카테고리의 다른 글

TCP 와UDP  (0) 2022.05.03
[BackEnd] Spring MVC  (1) 2022.03.29
[BackEnd] Spring JDBC  (0) 2022.03.29
[BackEnd] JDBC  (0) 2022.03.27
[BackEnd] DB, DBMS  (0) 2022.03.27