-
2023 - 06 - 20 JWT (Json Web Tokens)Today I Learned/TIL 06 2023. 6. 20. 01:19
JWT란
JSON 형태의 데이터를 안전하게 교환하여 사용할 수 있게 해준다.
인터넷 표준으로써 자리잡은 규격이다.
여러가지 암호화 알고리즘을 사용할 수 있다.
header.payload.signature 의 형식으로 3가지의 데이터를 포함한다. (개미처럼 머리, 가슴, 배) 때문에 JWT 형식으로 변환 된 데이터는 항상 2개의 . 이 포함된 데이터여야 한다.
- header(머리)는 signature(배)에서 어떤 암호화를 사용하여 생성된 데이터인지 표현한다.
- payload(가슴)는 개발자가 실제 만들고 원하는 데이터를 저장한다.
- signature(배)는 이 토큰이 변조되지 않은 정상적인 토큰인지 확인할 수 있게 도와준다.
- JWT는 비밀 키를 모르더라도 복호화(Decode)가 가능하다. 변조만 불가능 할 뿐, 누구나 복호화하여 보는것은 가능.
- 때문에 민감한 정보(개인정보, 비밀번호 등)는 담지 않도록 해야한다.
- 특정 언어에서만 사용 가능한것은 아니다. 단지 개념으로서 존재하고, 이 개념을 코드로 구현하여 공개된 코드를 우리가 사용하는게 일반적이다.
데이터를 교환하고 관리하는 방식인 쿠키/세션과 달리,
JWT는 단순히 데이터를 표현하는 형식이다.
- JWT로 만든 데이터를 브라우저로 보내도 쿠키처럼 자동으로 저장되지는 않지만, 변조가 거의 불가능하고 서버에 데이터를 저장하지 않기 때문에 서버를 Stateless(무상태)로 관리할 수 있기 때문에 최근 많이 쓰이는 기술중 하나이다.
- Stateless(무상태)와 Stateful(상태 보존)의 차이를 간단히 설명하자면,
Node.js 서버가 언제든 죽었다 살아나도 똑같은 동작을 하면 Stateless하다고 볼 수 있다.
반대로 서버가 죽었다 살아났을때 조금이라도 동작이 다른 경우 Stateful하다고 볼 수 있다.
- 서버가 스스로 어떤 기억을 갖고 다른 결정을 하냐 마냐의 차이라고 보면 더 쉽다
- 로그인 정보를 서버에 저장하게 되면 무조건 Stateful(상태 보존)이라고 볼 수 있다!'Today I Learned > TIL 06' 카테고리의 다른 글
2023 - 06 - 22 SQL (MySQL), 관계형 데이터베이스 (RDB), 비관계형 데이터베이스 (NoSQL) (0) 2023.06.22 2023 - 06 - 21 엑세스 토큰 (Access Token)과 리프레쉬 토큰 (Refresh Token) (0) 2023.06.21 2023 - 06 - 19 쿠키 (Cookie)와 세션 (Session) (0) 2023.06.19 2023 - 06 - 18 프론트엔드와 백엔드 (0) 2023.06.18 2023 - 06 - 17 MongoDB, Mongoose, 몽구스, Schema 스키마, model, populate, Queries 쿼리 (0) 2023.06.17