카테고리 없음

JWT( JSON Web Token )공부

rlarudals 2024. 9. 2. 17:30

Session and Cookie

Session

- stateless 한 HTTP의 특징을 보완하기 위한녀석

- session DB를 이용하여 유저의 정보를 기억하며 session ID라고 하는 랜덤한 key를 쿠키에 담아 Auth에 활용

- 쿠키를 사용해서 Session ID를 주고 받는것

 

Cookie

- 웹 브라우저와 요청과 응답을 주고받을때 사용하는 데이터 쪼가리

- cookie는 도메인에 제한적이며 유효기간이 정해져 있음

- Auth 외에도 다양한 방식으로 활용

 

 

But 

쿠키는 웹 브라우저에만 존재, 이로 인해 다양한 장치들과 공통적으로 사용할 수 있는 방식이 필요

JWT( JSON Web Token )

Token : 랜덤하게 생긴 문자열

Token의 예, .을 기준으로 구역이 나뉨

문자열.포맷.서명 으로 이루어짐, 여기에는 유저의 간단한 정보가 들어있음

JWT 방식으로 Auth를 처리하면 인증을 위한 여러가지 로직 처리가 필요 없음

 

처리방식

  1. 클라이언트가 ID/PW를 서버로 보냅니다.
  2. 서버에서 ID/PW를 검증하고 유효하다면 일정한 형식으로 서명 처리된 Token을 응답합니다.
  3. 이후 클라이언트는 모든 요청 헤더에 토큰을 담아 서버로 요청을 전송합니다.
  4. 서버는 해당 토큰의 유효성을 검증하고 유저의 신원과 권한을 확인 후 요청을 처리합니다.

 

Session과의 차이

- 세션 데이터베이스가 존재하지 않으며 데이터베이스가 필요하지 않다.

- 토큰 자체가 하나의 인증 데이터

- 서버는 토큰이 유효한지만 검증하여 처리

 

 

장점

- 서버에서 관리하는 데이터가 없으므로 복잡한 처리 로직이 필요하지 않습니다.

- 세션이나 DB없이 유저를 인증하는것이 가능합니다

 

단점

- 일방적으로 로그인을 무효화 하는 등의 처리가 불가능합니다. (세션 테이블 X)

- 모든 기기 로그아웃

- 현재 접속 유저 관리 등

- Token 자체가 데이터를 담고 있는 정보이므로 탈취당할시 보안이 취약합니다.

 

 

구조

.  을 기준으로 HEADER, PAYLOAD, VERIFY SIGNATURE 3가지로 구성

 

HEADER

- 토큰의 타입(jwt) 또는 서명 부분의 생성에 어떤 알고리즘(alg)이 사용되었는지 등을 저장

 

PAYLOAD

- 토근 발급자, 대상자, 만료시간,활성날짜, 발급시간 등등 표기

- 이부분에 서비스가 유저의 정보를 담아서 인증한다.

- 누구나 볼수가 있기 때문에 최소한의 정보를 저장(해킹방지)

- 각 데이터는 CLAIM 이라고도 하며 KEY - VALUE 으로 구성

 

SIGNATURE

- HEADER + PAYLOAD + 서버의 비밀키 값을 HEADER에 명시된 암호 알고리즘 방식으로 생성한 값

- 즉 PAYLOAD의 글자 하나만 달라져도 SIGNATURE는 완전히 다른 문자열로 변환되어 서버의 비밀키 값을 모른다면 유효-한 서명값을 만들어내는 것이 불가능

- 서버는 토큰을 받으면 HEADER + PAYLOAD + 비밀키로 생성한 서명값이 토큰의 서명값과 일치하는지를 확인하는 과정을 거쳐서 유효성 여부를 확인

- 서명의 유효여부 + 유효기간 내의 토큰인지 확인하여 Auth 과정을 처리

 

이제 실행하는 방법(힘들다 적는게)

INSTALL!!!
SETTING.PY 에 저 로직 넣기
로그인 기능을 위해 관련 로직 작성

 

 

저거 다 넣고 RUNSERVER 실행 후 POSTMAN ON