로그인 기능으로 설명
stateless: 시간에 따라 바뀌지 않는 상태값(비밀 키)을 갖는 것 => JWT
stateful: 시간에 따라 바뀌는 상태값(세션 id)을 갖는 것 => 세션
(세션 개념은 잡혀있기 때문에 따로 정리하지 않음)
토큰 방식이란?
토큰이란?
- ex) `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c`
- 인코딩 or 암호화된 3가지 데이터(header, payload, verify signature)를 이어붙인 형태
- 마침표로 끊어져서 세 부분으로 나뉜다
(header, payload, verify signature)
Base64 디코딩 => JSON
Claim: 토큰에 담긴 사용자 정보 등의 데이터
로그인 이후 요청마다 사용자가 서버한테 보내준다
그런데 Base64로만 디코딩이 되어있으면 사용자가 악용할 소지가 있지 않나요? => 헤더와 서명에서 암호화함
(header, payload, verify signature)
담겨있는 정보
(header, payload, verify signature)
페이로드와 헤더, '서버에 감춰놓은 비밀 값'을 암호화하면 서명값이 나온다
세션을 대체하기에는 JWT에 결점이 있다
세션(stateful)처럼 모든 사용자들의 상태를 기억하고 있다는 건 구현하기 부담되고 고려사항도 많지만,
이것이 되기만 하면 기억하는 대상의 상태들을 언제든 제어할 수 있다는 의미이기 때문이다
=> 세션은 서버에서 관리하기 때문에 필요시 삭제시킬 수 있다
=> 토큰은 이미 줘버렸기 때문에 관리할 수 없다
JWT는 session과 같은 선상에 있는 token의 한 종류이다
token에는 사용자 정보, 암호화 기법 정보 등이 담겨있고 서버가 아닌 사용자가 가지고 있다
사용자: 로그인한 상태에서만 사용할 수 있는 요청을 할때마다 서버에 token을 전달
서버: 자신만 아는 비밀키로 token을 분석하여 인가를 준다
공부한 유튜브 영상 링크
ㄴ 영상 너무 좋습니다....ㅠㅠ 추천!!!!