🍃 𝗦𝗽𝗿𝗶𝗻𝗴 𝗕𝗼𝗼𝘁

JWT(Json Web Token) :: JWT 형식, 동작과정

비타민찌 2022. 3. 18. 11:15
728x90

 

 

JWT(Json Web Token) :: JWT 형식, 동작과정

 

1. JWT란?

JWT(Json Web Token)는 웹표준 (RFC 7519)으로

JSON 포맷을 이용해 정보를 가볍고 안전하게 전송하기 위한 Claim 기반의 Web Token.

 

* 토큰?

토큰이라는 단어의 뜻은 동전. 버스카드나 교통카드라고 생각하면 된다.

근데 이 동전으론 시장에 가서 물건을 사거나 할 수는 없고, 버스를 탈 때 동전을 넣듯이 토큰은 특정한 목적에만 사용할 수 있다.

돈 보다는 바우처하고 비슷하겠다!

 

즉, 토큰은 일종에 권리를 주는 것이라 할 수 있다.

버스를 탈 수 있는 권리, 지하철을 탈 수 있는 권리를 부여 해주는것. 이 권리를 받는 방법은.. 토큰의 경우 돈을 냈느냐 안냈느냐다. 돈을 내면 토큰을 받고 이 토큰을 내고 버스에 탈 수 있다.

 

서버에서는 사용자가 결제한 돈도 왔다갔다 한다. 그렇기 때문에 '권한'이라는 것이 중요함!! 인터넷에 사이트를 올리면 전 세계에서 접근 할 수 있기 때문에 사용자나 해커나 이 사이트에 접근을 할 수 있다. 그래서 사용자들의 돈을 보호 하기 위해 본인만 돈을 넣고 빼고 주문을 넣고 결제를 할 수 있게 만들어야 한다. 이 토큰은 여기서 본인 확인 수단이 된다! 로그인을 할 때 id와 pw를 넣고 로그인을 하면 서버가 그것을 확인 해서 id와 pw가 맞으면 이 사용자가 유효한 사용자라는 토큰을 발행 해준다. 그러면 사용자들은 이 토큰을 가지고 해당 사이트의 여러 버스에 해당하는 서비스들을 이용 할 수 있는 것이다.

 

1-2) JWT의 특징

JWT에서는 토큰 자체에 유저 정보를 담아서 HTTP 헤더에 전달하기에 유저 세션을 유지할 필요가 없다.

 

1-3) JWT와 세션의 차이

세션 : '세션 저장소'에 접근할 수 있는 세션 아이디 발급.

JWT : 그런거 없음. 대신 Secret Key로 토큰 발급

 

1-4)  JWT의 필요성

✅ Session의 한계

Cookie는 정보를 클라이언트 측에 저장하고 Session은 정보를 서버측에 저장한다.

따라서 유저의 수가 너무 많으면 서버가 과부하되는 문제가 있다.

 

✅ Scale Out의 한계

서버 확장(scale out)시 세션 정보 동기화 문제.

 

✅ REST API는 Stateless를 지향

사용자의 상태 정보를 저장하지 않는 형태 (ex 세션, 쿠키)

 

 

2. JWT 형식

2-1. Header

alg : 해쉬 알고리즘  ,  typ : 타입

2-2. Payload : not mandatory / Additional information

sub : 어떤 것에 대해 말하는지

name : user의 이름 등

iat : 토큰 생성 시간

exp : 만료 시간

2-3. Signature

Base64 Encoded header + payload

512 bit secret key (base64 Encoded)

 

3. JWT 동작과정

 

1. 클라이언트 로그인 요청 POST(id, pw)

2. 서버는 (id, pw)가 맞는지 확인 후 맞다면 JWT를 Secret Key로 생성 후 전달

3. 클라이언트는 Token을 로컬 쿠키에 저장

4. 클라이언트는 서버에 요청할 때 항상 헤더에 Token을 포함시킴

5. 서버는 요청을 받을 때마다 Secret Kye를 사용해Token이 유효한지 검증

- 서버만이 Secret Key를 가지고 있기 때문에 검증 가능

- Token이 검증되면 따로 username, pw를 검사하지 않아도 user identification 가능

6. 서버의 Response

728x90