JWT(Json Web Token)의 사용이유와 개념
사용이유
앞서 쿠키와 세션의 단점을 보완하기 위해 나온만큼 크게는 두가지 이유가있다.
1.데이터 노출로 인한 보안적인 문제
2. 많은 양의 데이터가 반복적으로 전송되므로 서버에 과부하
개념
우선 말그대로 JSON Web Token 뜻대로
자바스크립트의 JSON 자료구조를 가지고 있으며, Web Token으로써 사용할 수 있다는 의미다.
JWT의 구성은 크게 헤더. 페이로드.시그니처로 나뉜다.
- 헤더: 토큰 타입, 암호화 알고리즘 명시
- 페이로드: JWT에 넣을 데이터, JWT 발급 / 만료일 등 명시
- 시그니처: 헤더, 페이로드가 변조 되었는지를 확인하는 역할
JWT를 이용한 인증 과정

- 사용자가 ID, PW를 입력하여 서버에 로그인 인증을 요청한다.
- 서버에서 클라이언트로부터 인증 요청을 받으면, Header, PayLoad, Signature를 정의한다.
Hedaer, PayLoad, Signature를 각각 Base64로 한 번 더 암호화하여 JWT를 생성하고 이를 쿠키에 담아 클라이언트에게 발급한다. - 클라이언트는 서버로부터 받은 JWT를 로컬 스토리지에 저장한다. (쿠키나 다른 곳에 저장할 수도 있음)
API를 서버에 요청할때 Authorization header에 Access Token을 담아서 보낸다. - 서버가 할 일은 클라이언트가 Header에 담아서 보낸 JWT가 내 서버에서 발행한 토큰인지 일치 여부를 확인하여 일치한다면 인증을 통과시켜주고 아니라면 통과시키지 않으면 된다.
인증이 통과되었으므로 페이로드에 들어있는 유저의 정보들을 select해서 클라이언트에 돌려준다. - 클라이언트가 서버에 요청을 했는데, 만일 액세스 토큰의 시간이 만료되면 클라이언트는 리프래시 토큰을 이용해서
- 서버로부터 새로운 엑세스 토큰을 발급 받는다.
#참조 https://inpa.tistory.com/entry/WEB-📚-JWTjson-web-token-란-💯-정리#jwt_json_web_token_이란 [Inpa Dev 👨💻:티스토리]
Access Token 과 Refresh Token 란?
간단히 풀면 Access Token은 말그대로 서버에 API를 직접 요청할때 쓰이고
Refresh Token은 Access Token 이 만료되었을 때 Access Token을 재발급할 목적으로 사용한다.
분리하는 목적은?
클라이언트와 서버 간의 API 통신 중, 토큰이 털릴 수 있기 때문이다.
그래서
- 직접 API를 호출하는 엑세스 토큰의 주기는 짧게 하고, (ex-약 1시간)
- 엑세스 토큰을 재발급하는 리프레시 토큰의 주기는 비교적 길게 한다. (ex-약 2주)
- 털렸을 때 가장 쓸모없고 서버에서 유저(데이터)를 식별할 수 있는 정보로입력하는것이 좋다.
- **그래서 엑세스 토큰 안에 중요한 값은 넣지 않는다.유저 식별용 데이터라면 세션과 비슷하게 DB에 가상 ID 혹은 노출되도 상관없는 데이터를 넣는것이 좋다.
@@ 너무 안된다..ㅠㅠ 흥미도 안붙고 ㅠㅠ
포기하지말자~!
'TIL' 카테고리의 다른 글
2023.11.15 TIL - CORS (0) | 2023.11.15 |
---|---|
2023.11.14 TIL (0) | 2023.11.14 |
2023.11.10 TIL (0) | 2023.11.10 |
2023.11.09 TIL (1) | 2023.11.09 |
2023.11.08 TIL (2) | 2023.11.08 |