티스토리 뷰

웹 개발 공부하기

[12.04] JWT🙋‍♀️

jooya-1009 2024. 12. 4. 21:17

💥 JWT(Json Web Token)

 : json형태의 데이터를 Web에서 안전하게 전송하기 위해 사용하는 Token

cf. 토큰(Token) : (인증용) 입장 가능한 유저 / (인가용) 관리자 권한&일반 유저 권한

=> 토큰을 가진 사용자가 "증명"을 하기 위한 수단

 

💥 JWT의 장점

- 보안에 강함! <= "암호화"가 되어있음

- 서버가 상태를 저장하지 않음! <= Stateless하다 <= HTTP 특징을 잘 따름

- 서버 부담을 줄여줄 수 있다!

cf. 토큰을 발행하는 서버를 따로 만들 수도 있다.

 

💥 JWT 구조

Encoded에 적혀있는 것이 JWT 이다. 아무리봐도 뭔 뜻인 지 1도 모르겠다. "암호화"가 되어있기 때문이다.

Decoded는 "복호화"를 했다고 한다. 암호화를 거꾸로 풀어냈다고 보면 된다.

 

JWT는 크게 3가지로 나뉜다.

HEADER 와 PAYLOAD, SIGNATURE 이다.

 

HEADER는 암호화에 사용된 알고리즘과 어떤 토큰인 지가 적혀있다.

 

PAYLOAD는 사용자의 정보를 담고있다. JWT 인 만큼 형태도 보아하니 json 형태로 되어있다.

 

SIGNATURE는 앞의 HEADER와 PAYLOAD의 데이터를 가지고 마지막으로 서명해주는 것이다.

 

사실 HEADER와 PAYLOAD는 복호화 또는 조작을 할 수 있다.

 

엥? 보안 개쩐다며? 보안 별론데...? 할 수도 있겠지만....

만약에 페이로드 값을 조작해서 값이 바뀌었다? 그래도 소용없다.

이미 서명한 값이 있고 값을 바꾼다면 서명값도 통째로 바뀌기 때문에 보안이 아주 강하다고 볼 수 있다.

 

💥 JWT 인증 절차

 

1. 로그인 요청(POST /login)

 - HTTP body에 username, password를 담아 보냄

 

2. 서버에서 내부 로직을 확인

 

3. JWT(토큰)을 발행

 - 언제 로그인을 했는 지 확인용 = JWT 발행 시점

 

4. 로그인 성공! / 로그인 당분간 유지해줄게~

 - 로그인 유지해줄게~ 대신 JWT 줄테니, 다음 요청 땐 이 JWT 들고와! 그럼 내가 해준 서명이 맞는 지 확인하고 들여보내줄게.

 

5. 다른 요청을 할 때

 - HTTP header에 JWT를 들고다님 = (나 로그인 또 안해도 되지? 나 인증된 유저 맞지?)

 

6. 서버가 본인이 해준 서명이 맞는 지 확인 후 로그인 안 해도 돼 드루와~

 

* 만약 내가 서명한 거 아닌디? 너 권한 없네? 너 못 옴 => 403 or Block

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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 31
글 보관함