JWT(JSON WebToken)
Json 포맷을 이용해 사용자에 대한 속성을 저장하는 Claim 기반의 Web Token
Claim: 사용자에 대한 프로퍼티나 속성을 뜻하며 영어 claim의 뜻은 주장하다, 요구 청구 권리 등을 뜻함.
Token: 동전을 뜻 하며, 마치 서비스를 이용하기 위해 자판기에 동전을 넣듯이 특정 서비스를 이용하기 위해 사용되는 권리를 보증하는 객체라고 해석 가능
JWT는 사용자에 대한 정보를 보관하고,
서버에서 사용자를 인증하고 사용자 정보를 관리하는데 주로 사용됨
JWT는 다음과 같이 3 구조로 이루어짐
Header: typ와 alg 두가지 정보로 구성이 됨
Payload: 사용자 정보와 같이 토큰에 담을 정보가 들어감
Signature: 토큰을 인코딩 하거나 유효성 검증을 할 때 사용되는 고유한 암호화 코드
JWT 이전에는 Cookie와 Session 이라는 방법이 존재했음
특징
Key-Value 형식의 문자열
사용자에 로컬에 저장되는 4KB이하의 작은 데이터 파일
사용자가 로그인시 ID를 저장하는 등의 사용자의 브라우저 사용에 대한 개인 데이터 저장용으로 사용 됨
단점
보안에 취약: 요청 시 쿠키의 값을 그대로 보내며, 유출 및 조작 가능성 존재
트래픽을 차지함: 브라우저 사용시 수시로 쿠키 정보를 참조하며, 통신 정보에 Cookie를 붙여 교환하기 때문에 트래픽을 발생
용량 제한: 많은 정보를 담지 못함
사용예
사용자 로컬에 저장되어 보안이 취약한 쿠키에 대한 대안으로 인증 정보를 서버 측에 저장하고 관리
브라우저 단위로 저장되며, 사용자가 브라우저 종료 시 제거됨
사용자가 요청을 보내면 서버에서 사용자에게 유일한 ID를 부여하는 방식
사용자의 요청(웹사이트 이용)이 계속 되는 동안 ID의 유효시간을 연장하며, 사용자의 브라우저 종료 또는 요청이 일정시간 없으면 폐기 하는 방식으로 사용됨
단점
서버에서 처리하는 특성상 서버 메모리를 많이 차지함
사용예
저장 위치
서버와 사용자로 주체가 나뉘는 만큼 각 장단점이 있어, 웹사이트에서는 Cookie와 Session을 섞어서 사용함
Cookie와 Session이 각 장단점이 있어 대부분의 사이트에서 병행해서 사용되듯이
JWT도 장단점이 존재함
JWT는 Session에 대체제가 아니라고 생각함
최상의 인증 방식은 없으며, 그저 상황과 환경에 맞춘 선호도가 있음
저장 위치
보안
JWT는 A(Header)+B(Payload)+C(Signature) 조합을 통해 이용함
사용자가 B에 담긴 유저 정보를 수정한 경우:
서버에서 토큰을 받아 Header와 Payload를 서버의 Key값을 이용해 Signature를 다시 생성시 정보가 다르기 때문에 조작 여부를 판별 가능
성능
사용자 권한 및 정보를 토큰에 담는 특성 상 토큰을 받아 사용자 정보를 DB에서 조회할 필요가 없음
DB 조회에 사용되는 리소스를 절약 가능
확장성
쿠키 및 세션은 해당 브라우저를 대상으로 동작함
JWT는 토큰 기반으로 다른 로그인 시스템 접근 및 권한 공유가 가능
단점
JWT는 사용자 정보와 header, 토큰 정보, Signature를 다 포함해 길이가 길며, 용량도 타 인증방식에 비해 큼
인증 요청이 많아질수록 네트워크 부하가 심해짐
사용자 정보가 담기는 Payload 자체는 암호화 되지 않기 때문에 중요 정보는 담을 수 없음
발급된 JWT는 유효기간이 완료될 때까지 사용이 가능함
토큰 자체가 인증 기능을 가지고 있는 특성상 탈취시 대처가 어려움
JWT는 사용자 로컬에 저장됨
토큰 자체에 인증 기능이 있어 탈취 되면 공격자가 자유롭게 사용이 가능
주요 공격 방법은 XXS, CSRF 공격이 존재
XSS(Cross Site Scripting)
CSRF(Cross-site request forgery)
JWT 토큰은 LocalStorage 또는 Cookie영역에 저장 됨
LocalStorage는 XXS 공격 위험 존재
Cookie 저장공간은 CSRF 공격 위험 존재
정답은 없으며 상황, 선호에 맞추어 저장 공간을 설정하고,
토큰의 만료시간을 짧게 만드는 등의 별도 보안 전략 수립이 필요
API(Application Programming Interface)
컴퓨터나 컴퓨터 프로그램 사이의 연결이다. 일종의 소프트웨어 인터페이스이며 다른 종류의 소프트웨어에 서비스를 제공한다.
API는 Interface 즉 연결자
A 라는 시스템, 라이브러리, 프로그램 등에 내부에서 동작하는 기능을 호출 및 사용하기 위해 접근하는 통로 개념
API 용도
내부 서비스, 기능 등을 제공하고자 할때 내부 구조를 숨기고 외부로부터 값을 받거나 내부에서 처리된 데이터를 전송하고자 할때 사용되는 접근 통로
예시로 스파르타에서는 서울 기온 정보를 전송해주는 주소가 존재
http://spartacodingclub.shop/sparta_api/weather/seoul
어떻게 기온 정보를 계산하는지는 모르겠지만 해당 주소를 통로로 사용해 기온정보를 요청하고, 스파르타에서는 기온 정보를 반환함
정부에서 데이터 공개하는 OpenAPI 서비스도 공개된(Open) 통로(API) 개념으로
정부에서 제공하는 주소를 통해 다양한 국가 데이터를 접근 가능함
다만 내부에서 어떻게 동작하는지를 알 수 없으며,
우리는 API 접근시 요청에 추가 데이터로 조건을 넣으면 API 정해진 형식으로 데이터를 처리하고 조건에 맞는 데이터를 반환해줌