-
JWT(JSON Web Token) 란얇게 공부한 CS 2024. 3. 1. 14:57
JWT는 인증에 필요한 정보를 암호화한 JSON 형식의 토큰으로, 웹 서비스의 인증 방식으로 사용할 수 있습니다.
JWT 토큰을 HTTP 헤더에 실어 서버가 클라이언트를 실별할 수 있도록 합니다.
JWT의 기본 구조
JWT는 크게 Header, Playload, Signature로 세 가지의 구성 요소로 이루어져 있습니다.
사용자가 인증을 수행하면, 서버는 다음의 정보를 가진 JWT 토큰을 발급합니다.
- Header
사용할 해시 알고리즘과 토큰의 타입을 포함하는 메타 정보를 담습니다.
- Payload
사용자의 클레임 등을 키-값 쌍으로 담은 정보입니다.
이 정보는 서버로 전달되어 인증에 사용됩니다.
- Signature
헤더와 페이로드를 합친 후, 비밀키로 해싱하여 생성한 서명입니다.
Client에게 함께 전달하며, 이를 통해 토큰의 무결성과 변조 방지가 보장됩니다.aaaaa[Header].yyyyy[Payload].zzzzz[Signature]
토큰 형식은 위와 같이 되어 있고, 각 부분이 점으로 구분됩니다.
| JWT 인증 과정
JWT의 인증 과정은 다음과 같이 진행됩니다.
1. 사용자가 로그인과 같은 인증을 수행합니다.
2. 서버는 사용자의 정보를 바탕으로 JWT를 생성하고 이를 사용자에게 전달합니다.
3. 사용자는 이후 요청에서 이 토큰을 서버에 제공합니다.
4. 서버는 토큰의 Signature를 검증하여 사용자를 인증합니다.
해당 과정에서 서버가 가지고 있는 비밀키(Secret Key)를 사용합니다.
또한 사용자는 서버가 처음에 부여했던 권한만큼의 작업을 요청할 수 있고,
데이터를 변경하면 해시 값이 변경되므로, 악의적인 공격자가 Payload를 수정하는 것이 불가능합니다.
| 장단점
장점
- 세션 기반 인증과 비교하여 서버가 세션 정보를 따로 저장할 필요가 없어 서버 자원을 절약할 수 있습니다.
- 무상태성(stateless)을 유지할 수 있으며, 서로 다른 웹 서버 간에도 잘 작동합니다. (웹 브라우저의 쿠키와 다른 점)
단점
- 세션에 비하여 토큰의 길이가 길 수 있습니다.
- 페이로드는 암호화되지 않으므로 중요 정보를 포함시키기에 적합하지 않습니다.
- 토큰이 탈취될 경우 보안상 문제가 발생할 수 있습니다. (따라서 토큰에 사용 기한을 부여)
| 유의사항
- 페이로드에 민감 정보를 포함시키지 않도록 해야 합니다. 만약 필요하다면, 내용을 암호화하는 것을 고려해야 합니다.
- JWT는 주로 위조 방지와 서버의 부하 경감을 목적으로 사용됩니다.
'얇게 공부한 CS' 카테고리의 다른 글
Oauth (0) 2024.02.27 HTTP(HyperText Transfer Protocol) 이해하기 (0) 2024.02.26 REST API (0) 2024.02.25 명령어의 구조 (0) 2024.02.24 쿠키(Cookie)와 세션(Session) (0) 2024.02.23