노드숙련강의 2-3

·2022년 12월 19일
0

study

목록 보기
11/81
post-thumbnail

JWT사용법

01. 오픈소스 라이브러리 사용

우리는 제일 사용량이 많은 jsonwebtoken 라이브러리를 사용

npm init -y
npm i jsonwebtoken (-S)

02. JSON 데이터를 암호화

const jwt = require("jsonwebtoken");

const token = jwt.sign(
  { myPayloadData: 1234 }, //jwt이용해서 payload설정
  "mysecretkey"); // 암호화를 위한 비밀키
console.log(token);

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJteVBheWxvYWREYXRhIjoxMjM0LCJpYXQiOjE2Njc1NjE0NDB9.nvYSsLsT8jp7IfkbB2seCNeuLqRBgrrzDjKRFXjvoUE
이렇게 데이터가 출력 => . 3개로 나뉘는 모습을 볼 수 있음.

jwt.io에서 저 암호화된 코드를 붙여넣어주면
jwt.io

03. 복호화

const jwt = require("jsonwebtoken");

const token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJteVBheWxvYWREYXRhIjoxMjM0LCJpYXQiOjE2Njc1NjE0NDB9.nvYSsLsT8jp7IfkbB2seCNeuLqRBgrrzDjKRFXjvoUE";
const decodedValue = jwt.decode(token);
//jwt의 payload를 확인하기 위해서 사용한다.

04. 복호화가 아닌, 변조되지 않은 데이터인지 검증

검증은
1. 암호화를 할 때 사용한 비밀키가 일치하는 검증
2. 해당하는 jwt가 만료되었는지 검증

const jwt = require("jsonwebtoken");

const token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJteVBheWxvYWREYXRhIjoxMjM0LCJpYXQiOjE2Njc1NjE0NDB9.nvYSsLsT8jp7IfkbB2seCNeuLqRBgrrzDjKRFXjvoUE";
const decodedValueByVerify = jwt.verify(token, "mysecretkey");

틀린 비밀키를 입력하면 error가 뜨게 됨.

04+. 만료된 jwt 검증

1초뒤에 만료되는 jwt를 만들고(expiresIn:"1s"), 1.5초 뒤에 jwt를 검증(verifyToken)하게 되면 error 발생

만료된 jwt 검증

05. 암호화 된 데이터는 어떻게 사용?

  • 보통 암호화 된 데이터는 클라이언트(브라우저)가 전달받아 다양한 수단(쿠키, 로컬스토리지 등)을 통해 저장하여 API 서버에 요청을 할 때 서버가 요구하는 HTTP 인증 양식에 맞게 보내주어 인증을 시도합니다!
  • 비유하자면, 놀이공원의 자유이용권과 비슷!
    • 회원가입: 회원권 구매
    • 로그인: 회원권으로 놀이공원 입장
    • 로그인 확인: 놀이기구 탑승 전마다 유효한 회원권인지 확인
    • 내 정보 조회: 내 회원권이 목에 잘 걸려 있는지 확인하고, 내 이름과 사진, 바코드 확인
profile
개발자 꿈나무

0개의 댓글