junior developer :)/CS(Computer Science)지식

JWT(Json Web Token)에 대해서

ㅁ윤슬ㅁ 2023. 7. 21. 16:37
728x90
반응형

오늘은 다양한 프로젝트 중 jwt 기능을 많이 쓰면서도 제대로 정리해봤던 적이 없는 것 같아 JWT에 대해서 자세히 알아보고 정리해보는 시간을 가져보려고 한다.

JWT 란?

JWT(Json Web Token)은 일반적으로 클라이언트와 서버 사이에서 통신할 때 권한 확인 을 위해 사용하는 토큰이다.

JWT는 헤더(header), 페이로드(payload), 서명(signature) 세 파트로 나눠져 있으며 header.payload.signature 형태로 구성되어 있다. 또한 URL에서 파라미터로 사용할 수 있도록 base64 인코딩을 사용한다.

1. header

헤더에서는 어떤 알고리즘으로 암호화할 것인지(alg), 어떠한 토큰을 사용할 것인지(typ)에 대한 정보가 들어있다.

2. payload

전달하려는 정보(유저의 정보, Claim이라고 부른다)를 담고 있다.
payload에 있는 내용은 수정이 가능하고 다양한 정보를 추가할 수 있다.

(JWT 토큰은 디코딩을 통해 들어있는 정보를 확인하는 것이 매우 쉽기 때문에 민감한 정보는 넣지 않고 최소한의 정보를 넣는 것을 추천한다)

3. signature

토큰을 인코딩하거나 유효성 검증을 위해 이용되는 부분이다.
서버가 지정한 secret key로 암호화 시켜서 토큰을 변조하기 어렵게 만들기 때문에 누군가 payload를 조작한다면 이미 암호화 되어 있는 결과가 저장되어 있어 조작된 payload와 다른 결과값임을 확인할 수 있다.

JWT를 이용한 로그인 과정

jwt를 이용한 로그인 과정은 아래와 같다.

1. 사용자가 ID/PW를 입력해 로그인을 요청한다
2. 서버는 회원 DB에 들어가 있는 사용자가 맞는지 확인한다.
3. 확인이 되면 서버가 secret key를 통해 토큰을 발급하고 클라이언트에 전달한다.
4. 서비스 요청과 권한을 확인하기 위해 헤더에 데이터(JWT)요청을 한다.
5. 데이터를 확인하고 JWT에서 사용자 정보를 확인한다.
6. 클라이언트 요청에 대한 응답과 요청한 데이터를 전달해준다.

간략하게 요약하면
로그인시 사용자의 인증이 완료되면 서버에서 토큰을 발급해주고 클라이언트쪽에서 전달받은 토큰을 저장해둔 뒤 서버에 요청을 보낼 때마다 해당 토큰을 함께 전달한다.
서버는 이 토큰을 확인하여 검증하고 응답하는 방식이다.


Q. JWT 토큰에 대해서 설명해주세요

A. 
JWT는 클라이언트와 서버 사이에서 통신할때 권한 확인을 위해 사용하는 것입니다.
JWT는 헤더, 페이로드, 서명 세 파트로 나뉘어 구성됩니다. 먼저 헤더에서는 어떤 알고리즘으로 암호화하고 어떤 토큰을 사용할 것인지에 대한 정보가 들어있고, 페이로드에는 전달하려는 정보가 들어있습니다. 수정이 가능하지만 디코딩을 통해 정보를 확인하기 쉽기 때문에 민감한 정보는 넣지 않는 것이 좋습니다. 서명부분은 토큰을 인코딩하거나 유효성검증을 위해 이용되는 부분입니다.

+
JWT를 이용한 로그인 방식은 로그인시 사용자의 인증이 완료되면 서버에서 토큰을 발급해주고, 클라이언트쪽에서 전달받은 토큰을 저장해둔 뒤 서버에 요청을 보낼 때마다 해당 토큰을 함께 전달하고, 서버는 이 토큰을 확인하여 검증하고 응답하는 방식으로 진행됩니다.

참고

https://brunch.co.kr/@jinyoungchoi95/1

728x90
반응형