SpringBoot Meteor

[Spring Boot] JWT (JSON WEB TOKEN) 간단 정리

DoubleMeteor 2021. 12. 23. 14:58

JWT가 무엇이고 어떻게 사용되는 것 인가 ?

  • 세션

서버가 가지고있는 세션 영역

세션영역의 값이 비워지는 경우

  1. session (서버쪽에서 session값을 날리는 경우)
  2. 사용자가 모든 브라우저를 다 닫을 때
  • 세션의 단점

요청이 많으면 부하가 걸림 ⇒ 로드밸런싱으로 서버를 나누어서 요청을 처이함 ⇒ 1번2번3번 서버의 세션이 다 다르기때문에 1버서버세엇 인증을 받은 값이 2번서버에서는 안먹힐 수 있다.

⇒ 세션값을 DB에 저장 (io 발생 성능 저하 속도 엄청 느림) 모든 서버가 DB에서 세션값을 가져옴 (성능 저하)

 <메모리 서버를 사용하면 빠르게 가능 함 대표적인 예 : raddis server)

하드디스크에서 데이터를 찾아오기위해 접근할 때 io가 발생한다고 한다. io는 속도가 엄청 느림.

⇒ 원래 왔던 서버로 다시 보내는 방식으로 해결 가능 (비효율)

⇒ 서버끼리 세션값을 공유해서 사용 (비효율)

이런것들을 해결하기위해 JWT를 사용

  • JWT를 알기 전에

OSI 7계층

ㅡㅡㅡㅡㅡㅡㅡㅡWANㅡㅡㅡㅡㅡㅡㅡ 월드와이드 장거리 통신

응용계층 : 스타크래프트 : 하이템플러 스킬

프리젠테이션 계층 : 암호화 (압축)

세션 계층 : 인증 체크

트랜스포트 : TCP / UDP

< TCP : 신뢰성있는 통신 데이터 잘 갔는지 안 갔는지 계속 확인함 : 게임 >

< UDP : 보내고 싶은 데이터 무자비하게 보냄 신뢰성 없는 통신 예시 : 전화, 동영상>

네트워크 : IP

ㅡㅡㅡㅡㅡㅡㅡㅡLANㅡㅡㅡㅡㅡㅡㅡㅡ 로컬 통신 근거리 통신

데이터링크 : 어떤 컴퓨터인지 찾아줌

물리 : 전기선 같은것들

웹은 TCP 통신을 한다.

  • 보안

CIA

C : 기밀성 (문서를 탈취 → 기밀성 깨짐)

I : 무결성 (문서를 위조 → 무결성 깨짐)

A : 가용성 (위조된 문서를 읽음 → 가용성 깨짐)

문서를 지키는 법 : 암호화(기밀성 유지 ⇒ 가용성 확보)

  1. 열쇠(보안) 전달 문제 (암호화)
  2. 누구로부터 온 문서인지

이 2가지의 문제만 해결 가능하면 보안이 유지된다.

RSA(암호화)

public key : 공개키

private key : 개인키

키 하나 : 시멘트리키 (대칭키) ⇒ 공개키 기반 암호화

—전자문서 (서명 즉, 인증)로 사용 ⇒ 개인키로 잠그고 공개키로 푼다.

— 암호화로 사용되는것은 공개키로 잠구고 개인키로 푸는 것

<실력이 빨리 늘려면 기초를 다지고, 개념을 다져라>

  • RFC란 ?

약속된 규칙으로 만들어진 문서

프로토콜 : 약속된 규칙

네트워크가 연결되면서 약속된 문서가 생긴다.

인터넷은 RFC 문서로 만들어져있다 . (www : world wired web) 약속의 프로토콜 = http 프로토콜

jwt 공식사이트 :

JWT.IO

jwt의 구조

  1. Header(헤더)

2.Payload(정보)

3.Signature(서명)

xxxxx.yyyyy.zzzzz

Base64Url : 암호화 / 복호화 가능 (디코딩 가능)

해쉬 암호화 : 복호화 불가능

등록된 클레임 : 발행자, 만료시간, 주제, 정중 등의 정보

개인클레임 : 유저아이디 정보

header : HS256

payload : username

signature : header + payload + 서버만 알고있는 키값

HMAC → 시크릿키를 포함한 암호화 방식

SHA256 → 해쉬 암호화 방식(복호화 불가능)

 

자료출처 : 유튜브 메타코딩 Spring Security 강의