[Node.js]에서 JWT 사용

yunji·2023년 3월 11일
0

node js

목록 보기
3/9
post-thumbnail

JWT란

JWT란 json web token이다.

장점

토큰인증 방법에 사용되는 알고리즘이 가장 쉽게 구성 되어 있다. verify하는 과정이 간단하다.

JWT 구조

“Header”:{ 
    토큰의 타입, jwt,
    해시 알고리즘의 종류,
    토큰의 설정(발급자, 만료 시간)
}, 
“Paylod”:{
    토큰에 넣고 싶은 값(아이디, 비번, 이름, 등등 )
}, 
“Signature”:{
    비밀키로 해싱 된 결과
}

동작 방식

  1. 프론트에서 첫 번째 로그인 발생
  2. 서버의 특정 api 가 이를 받아서, 토큰으로 만든다. Jwt를 만든다.
    A. 토큰의 들어갈 내용 넣기(header와, payload)를 넣어준다.
    B. Header, payload를 비밀키로 암호화(해싱)을 진행.
    C. 비밀키로 암호화한 결과를 sigantrue에 넣어 준다.
    D. String으로 변환.
  3. 프론트엔드에게 전달
  4. 프론트엔드는 만들어진 token을 받아서 어딘가에 저장 한다.

검증 방식

  1. 프론트엔드는 api호출시 발급 받은 token과 요청값을 같이 보내준다.
  2. String을 다시 json으로 변환
  3. Header에 적혀 있는 해싱 알고리즘을 사용하여 (서버가 가지고 있는 비 밀 키로)를 사용해서 signature 부분 해싱을 진행한다.
  4. 해싱 된 결과를 header와 payload와 비교 한다.

npm으로 jsonwebtoken 설치

$ npm install jsonwebtoken

jwt.sign()는 jwt생성 하는 함수 이다. Sign default 알고리즘은 HMAC SHA256이다.

jsw token 생성

var jwt = require('jsonwebtoken')
const jwtSecretKey = process.env.JWT_SECRET_KEY//.env파일에 
저장된 비밀키 


 const jwtToken=jwt.sign(
                        {
                        	//인증 data 정보
                            "pw": passwordValue,
                            "id": idValue
                        },
                        jwtSecretKey,//비밀키
                        {
                            "issuer": "",//token 발행하는 사람
                            "expiresIn": ""// 종료시간
                        }
                    )

JWT 인증

verify()로 인증하기

const jwt = require("jsonwebtoken")
const jwtSecretKey = process.env.JWT_SECRET_KEY

//token verify 
        jwt.verify(pulbicKey, jwtSecretKey)
        //publickey-> 프론트엔드에서 보내준 token값

payload 구하기

payload로 사용자의 id를 구할 수있다.

//payload 

const base64Payload = token_public.split('.')[1]// jwttoken 0번째 header, 1번째  payload, 3번째 서명
const  payload = Buffer.from(base64Payload, 'base64')
const result = JSON.parse(payload.toString())

 
profile
웹 개발

0개의 댓글