일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 광명돼지집
- 큐넷 폐업
- BENQ EX2510S REVIEW
- vue 로그인
- 4대보험미가입 경력증명서
- EX2510S음질
- 큐넷 필기시험장소 변경
- 경기도광명돼지집
- 큐넷 시험 변경
- 경기도광명맛집추천
- vue prettier
- 벤큐 EX2510
- 큐넷 사실확인서
- 큐넷 4대보험
- 정보처리기사 시험장도 변경
- HTML CSS Support
- 큐넷 4대보험미가입
- vue eslint설정
- 벤큐 EX2510S
- 서울근교두루치기
- vue 설정
- 큐넷 시험장소 변경
- vue.js 로그인
- 큐넷 사대보험
- 벤큐 EX2510S 후기
- 시험장소변경
- 큐넷 폐업 사대보험 미가입
- eslint prettier차이
- 광명김치찌개
- vuetify 설치
- Today
- Total
코딩 발걸음 - 한발두발개발
JWT(JSON Web Token)란? 본문
1. JWT(JSON Web Token)란?
인증에 필요한 사용자의 정보를 JSON개체로 안전하게 전송하기 위한 암호화된 토큰
2. 세션(Session)과의 인증 차이
세션 기반 인증
[클라이언트] 유저 로그인 =>
[서버] 유저정보 확인 =>
[서버] 맞을 시 세션 DB에 유저의 세션 아이디와 정보 등을 저장=>
[서버] 유저에게 세션아이디를 응답 =>
[클라이언트] 세션아이디를 쿠키에 저장 =>
[클라이언트] 서버에 다른 요청(헤더에 세션 아이디를 포함) =>
[서버] 요청받은 세션아이디를 이용하여 DB를 확인하고 세션이 유효한지 확인 =>
[서버] 유효 여부에 따라 클라이언트에게 응답
토큰 기반 인증
[클라이언트] 유저 로그인 =>
[서버] 유저정보 확인 =>
[서버] 맞을 시 유저정보가 담긴 ACCESS 토큰을 발행하여 클라이언트에게 전달 =>
[클라이언트] 토큰을 쿠키 or 로컬스토리지???에 저장 =>
[클라이언트] 서버에 다른 요청(헤더에 토큰을 포함) =>
[서버] 요청받은 ACCESS 토큰이 유효한지 확인 =>
[서버] 유효 여부에 따라 클라이언트에게 응답
차이 : 유저의 상태에 대한 정보를 서버에 저장하냐(세션 기반) 저장을 안하냐(토큰 기반)의 차이
세션 기반
장점
유저에 대한 상태를 서버가 관리하여 보안적으로 세션에 비해 뛰어나다
예) 특정한 유저를 로그아웃 시키고 싶을 경우 세션 테이블에 저장되어있는 유저의 정보만 삭제해버리면 로그아웃 되버림
단점
서버에 유저의 상태를 저장하기 때문에 유저가 증가할 수록 과부화가 늘어남.서버가 분산되어 있을 경우에도 어떤 서버에서 찾냐의 문제가 생김?
토큰 기반
장점
서버는 토큰에 대한 유효여부만 확인하면 되기때문에 세션기반에 비해서 작업이 가볍고, 서버가 분산 되어있더라도 상관없음
단점
세션기반에 비해서 보안이 약함 ACCESS TOKEN이 탈취되면 서버에서 아무런 방어를 할 수 없음 =>
대처를 위해 refresh 토큰이 나옴
-- 토큰 기반 인증 중 왜 jwt를 사용하는가?
비교대상
SWT (Simple Web Tokens): 단순 웹 토큰 => xml
SAML (Security Assertion Markup Language Token) : 보안검증 마크업 언어 => xml
JWT => JSON
1. JSON이 XML보다 인코딩 될때 크기가 작아짐
2. SWT대칭키만을 이용, JWT와 SAML은 공개/ 개인 키 쌍을 사용할 수 있음.
3. 클라이언트측에서 JSON과 XML 중 파싱하기에 JSON이 용이
토큰 기반 인증 (refresh 토큰 사용)
[클라이언트] 유저 로그인 =>
[서버] 유저정보 확인 =>
[서버]
맞을 시 유저정보가 담긴 Access(짧은 유효기간 1시간), Refresh토큰(긴 유효기간 2주)을 발행하여 클라이언트에게 전달 =>
[클라이언트] 각 토큰을 쿠키 or 로컬스토리지???에 저장 =>
[클라이언트] 서버에 다른 요청(헤더에 Access토큰을 포함) =>
[서버] 요청받은 Access 토큰이 유효한지 확인 =>
======유효기간 만료시======
[서버] 클라이언트에게 유효 기간 만료 응답
[클라이언트] Access, Refresh토큰을 가지고 다시 서버에게 Access토큰 재발행 요청
[서버] Access, Refresh토큰 유효한지 확인 하여 유효 여부에 따라 클라이언트에게 응답=>
******참조******
https://tansfil.tistory.com/m/59
3. 토큰의 형태
-토큰의 타입을 명시하는 header
-토큰에 담을 정보가 들어있는 payload
-서명
*****참조*****
header와 payload를 해싱하여 만들어진 토큰
'개발 > Node.js' 카테고리의 다른 글
카페24 호스팅 방법 - 1. 서버 구매와 접속하기 (0) | 2022.06.14 |
---|---|
Node.js (0) | 2020.06.18 |