JWT(JSON Web Token)
- 인증에 필요한 정보를 토큰에 담습니다.
- 데이터가 Json의 형식으로 담깁니다.
- 주로 클라이언트와 서버 간에 인증 정보를 교환할 때 사용합니다.
구성
1. Header : 토큰 타입 + 사용할 해싱 알고리즘
2. Payload : 사용자의 정보
3. Signature : 비밀키를 사용해 생성된 서명
무슨 말인지 잘 모르겠습니다..
영화관 입장권로 비유하여 이해해보겠습니다.
영화관에 들어가려면 입장권이 필요합니다.
입장권은 해당 영화관에서만 발급할 수 있습니다.
진짜 입장권인지 식별하기 위해, 입장권에는 영화관 도장이 찍혀있습니다.
입장권에는 무슨 영화를 보는지, 몇 시에 입장하는지, 좌석 번호가 무엇인지와 같은 정보가 적혀 있습니다.
JWT도 이와 같습니다.
1. 페이로드 = 입장권에 적힌 정보
페이로드에는 인증에 필요한 정보가 적혀있습니다. 이 정보는 누구나 읽을 수 있습니다.
하지만 이 정보만으로는 입장권의 진위 여부를 판단할 수는 없습니다.
2. 서명 = 영화관 도장
누군가가 입장권의 적힌 정보를 똑같이 위조해서 가져오더라도,
이 도장은 위조하기가 어렵기 때문에, 영화관의 도장을 보고 진짜인지 가짜인지 파악할 수 있습니다.
JWT는 서명을 통해 발급처를 알 수 있어, 토큰의 진위를 확인할 수 있습니다.
3. 헤더 = 입장권 상단 정보
"이 입장권은 QR코드로 발급하고, 진위 여부를 위한 도장이 찍혀있습니다." 처럼,
JWT는 "이 토큰은 HMAC SHA256 방식으로 발급하고, 진위 여부를 위한 토큰 타입은 JWT입니다." 라고 명시됩니다.
정리
- 누구나 토큰의 내용을 볼 수 있으므로 열람 가능한 정보만 담아야 합니다. 비밀번호와 같은 민감한 정보는 담아서는 안됩니다.
- 그런데 왜 사용할까? 토큰 자체의 발급처를 확인할 수 있기 때문입니다.
- 토큰의 내용은 위조할 수 있어도 서명은 위조할 수 없습니다.
- 따라서 외부에서 페이로드 값을 변경해서 보내더라도, 서버는 이 토큰이 변조되었다고 인식하여 거부합니다.
- JWT는 데이터를 안전하게 확인하고, 위조를 방지하는 인증 방식입니다.
'백엔드' 카테고리의 다른 글
GraphQL 커스텀 예외 처리하기 (0) | 2024.09.13 |
---|---|
활용성있는 데이터 파이프라인 구축을 위한 아이디어 (0) | 2024.08.30 |
할인 정책 개발 - 추상 클래스와 인터페이스 중에 어떤걸 사용할까? (0) | 2024.08.14 |
모델링 - 다대다 관계 설계하기 (1) | 2024.08.06 |
PUT vs PATCH (0) | 2024.02.25 |