백엔드

JWT 이해하기

qwertyv 2024. 3. 10. 20:28

JWT(JSON Web Token)

- 인증에 필요한 정보를 토큰에 담습니다.

- 데이터가 Json의 형식으로 담깁니다.

- 주로 클라이언트와 서버 간에 인증 정보를 교환할 때 사용합니다.

 

구성

1. Header : 토큰 타입 + 사용할 해싱 알고리즘

2. Payload : 사용자의 정보

3. Signature : 비밀키를 사용해 생성된 서명


 

무슨 말인지 잘 모르겠습니다..

영화관 입장권로 비유하여 이해해보겠습니다.

 

영화관에 들어가려면 입장권이 필요합니다.

입장권은 해당 영화관에서만 발급할 수 있습니다.

진짜 입장권인지 식별하기 위해, 입장권에는 영화관 도장이 찍혀있습니다.

입장권에는 무슨 영화를 보는지, 몇 시에 입장하는지, 좌석 번호가 무엇인지와 같은 정보가 적혀 있습니다.

 

JWT도 이와 같습니다.


1. 페이로드 = 입장권에 적힌 정보

페이로드에는 인증에 필요한 정보가 적혀있습니다. 이 정보는 누구나 읽을 수 있습니다.

하지만 이 정보만으로는 입장권의 진위 여부를 판단할 수는 없습니다.

 

2. 서명 = 영화관 도장

누군가가 입장권의 적힌 정보를 똑같이 위조해서 가져오더라도,

이 도장은 위조하기가 어렵기 때문에, 영화관의 도장을 보고 진짜인지 가짜인지 파악할 수 있습니다.

JWT는 서명을 통해 발급처를 알 수 있어, 토큰의 진위를 확인할 수 있습니다.

 

3. 헤더 = 입장권 상단 정보

"이 입장권은 QR코드로 발급하고, 진위 여부를 위한 도장이 찍혀있습니다." 처럼,

JWT는 "이 토큰은 HMAC SHA256 방식으로 발급하고, 진위 여부를 위한 토큰 타입은 JWT입니다." 라고 명시됩니다.


정리

- 누구나 토큰의 내용을 볼 수 있으므로 열람 가능한 정보만 담아야 합니다. 비밀번호와 같은 민감한 정보는 담아서는 안됩니다.

- 그런데 왜 사용할까? 토큰 자체의 발급처를 확인할 수 있기 때문입니다. 

- 토큰의 내용은 위조할 수 있어도 서명은 위조할 수 없습니다.

- 따라서 외부에서 페이로드 값을 변경해서 보내더라도, 서버는 이 토큰이 변조되었다고 인식하여 거부합니다.

- JWT는 데이터를 안전하게 확인하고, 위조를 방지하는 인증 방식입니다.