'오늘의 계절, 오늘의 노래' 라는 프로젝트를 진행하면서
JWT방식으로 로그인+회원가입을 프로그래밍을 해보았지만,
JWT와 친해지지 않아 자세히 알아보기로 해보았다.
JWT 는 무엇일까?
JWT는 JSON Web Token의 약자로 전자 서명 된 URL-safe (URL로 이용할 수있는 문자 만 구성된)의 JSON입니다.
JWS (Jason Web Signature) : JSON을 암호화하여 URL-safe 문자열로 표현한 것
JWE (Jason Web Encryption) : JSON 데이터 구조를 사용하여 암호화 방법
*URL Safe : URL에 포함 할 수 없는 문자를 포함하지 않는 것
JWT 토큰 구성
JWT 토큰 구성은 헤어(header) + 페이로드(payload) + 서명(Signature)로 구성되며,
각 부분은 Base64로 인코딩 되어 표현된다.
헤어(header) : 토큰의 유형 (JWT) + HMAC, HS256(SHA256) 또는 RSA와 같은 해시 알고리즘을 나타낸다.
페이로드(payload) : 토큰에 담을 (name/value)를 한쌍으로 이룬 클레임(claim)정보를 나타낸다.
클레임 정보는 등록된 클레임, 공개 클레임, 비공개 클레임으로 나뉜다.
서명(Signature) : secret key를 포함하여 암호화 되어있다.
JWT Process
- 클라이언트의 로그인 정보를 서버에 저장하지 않아, 토큰기반 인증 메커니즘을 제공한다.
- 로그아웃 시, 로컬 스토리지 저장된 JWT 데이터를 제거한다.
JWT의 적용
- 회원인증 : JWT의 가장 흔한 방법
- 정보교류 : 두 개체 사이에서 안정성있게 정보를 교환하기에 좋은 방법이다.
정보가 서명되어있기 때문에, 보낸이가 바뀌진 않았는지 도중에 조작되지 않았는지 확인할 수 있다.
JWT 장점
- 사용자 인증에 필요한 모든 정보는 토큰 자체에 포함되어 별도 인증 저장소가 필요없다.
- 디버깅 및 관리가 용이하다.
- 트래픽 부담이 낮다.
- 독립적인 JWT
JWT 단점
- 더 많은 정보를 입력할수록 토큰이 커져 네트워크 부하를 줄 수 있다.
- JWT는 상태를 저장하지 않아 제어가 어렵다.
- 임의로 토큰을 삭제할 수 없어 '토큰 만료 시간'을 꼭 넣어주어야 한다.
- Payload 는 암호화 한 것이 아니기 때문에
- JWE를 암호화 하거나 Payload에 중요한 데잉터를 넣지 말아야한다.
opennaru blog, 'JWT(JSON Web Token) 이해와 활용' 참고하였습니다.
'개발 이야기 > 항해99' 카테고리의 다른 글
[항해99] 4주차 - package.json이란? (0) | 2022.03.27 |
---|---|
[항해99] 3주차 - 자바스크립트 ES5와 ES6의 문법차이 (0) | 2022.03.20 |
[항해99] 시작 전 사전수업 - 5주차: AWS서버연결, Gitbash, 가비아 도메인연결 (0) | 2022.02.10 |
[항해99] 시작 전 사전수업 - 4주차: flask, 크롤링, DB연결 (0) | 2022.02.09 |
[항해99] 시작 전 사전수업 - 3주차: mongoDB연결 및 작동법 (feat.mongoDB 연결 오류) (0) | 2022.02.07 |