RSA 서명이 있는 JWT
이 기사에서는 RSA 키로 JSON 웹 토큰에 서명하는 방법을 배웁니다.
시작하자!
NodeJS 프로젝트 초기화
먼저 프로젝트 폴더를 생성하겠습니다. 그런 다음
jsonwebtoken
패키지를 설치합니다.cd path/to/your/workspace
# Create project folder
mkdir jwt-rsa
# Change directory
cd jwt-rsa
npm init -y
# Install JWT
npm install --save jsonwebtoken
RSA 토큰 생성
이제 공개 키와 개인 키를 생성해 보겠습니다. 키 길이를 늘리면 토큰 길이도 늘어납니다. 이는 HTTP 요청 본문 크기가 증가함을 의미합니다. 그러나 또한 우리가 서명할 페이로드의 종류에 따라 다릅니다.
# Create a folder named keys
mkdir keys
# Minimum RSA key length is 1024 bits
# Maximum RSA key length is 16384 bits
# Don't add passphrase
ssh-keygen -t rsa -b 1024 -m PEM -f keys/rsa.key
# Write public key to keys/rsa.key.pub file
openssl rsa -in keys/rsa.key -pubout -outform PEM -out keys/rsa.key.pub
또한 이것을 사용하여 공개/개인 키 쌍을 얻을 수 있습니다online tool.
폴더 구조
signToken() 및 verifyToken() 메서드 구현
issuer
, audience
또는 expiresIn
등과 같은 모든 jwt 옵션을 사용하지는 않습니다. algorithm
제외이것이 토큰을 동 기적으로 서명하는 방법입니다. 이 사용법은 JSON 웹 토큰을 문자열로 반환합니다.
jwt.sign(payload, secretOrPrivateKey, options)
jwt.js
signToken()
: 페이로드 객체를 매개변수로 사용하고 토큰을 문자열로 반환합니다. verifyToken()
토큰을 매개변수로 사용하고 서명한 페이로드를 반환합니다.//* jwt.js
const fs = require('fs')
const path = require('path')
const jwt = require('jsonwebtoken')
const privateKey = fs.readFileSync(path.join(__dirname, 'keys', 'rsa.key'), 'utf8')
const publicKey = fs.readFileSync(path.join(__dirname, 'keys', 'rsa.key.pub'), 'utf8')
module.exports = {
signToken: (payload) => {
try {
return jwt.sign(payload, privateKey, { algorithm: 'RS256'});
} catch (err) {
/*
TODO throw http 500 here
! Dont send JWT error messages to the client
! Let exception handler handles this error
*/
throw err
}
},
verifyToken: (token) => {
try {
return jwt.verify(token, publicKey, { algorithm: 'RS256'});
} catch (err) {
/*
TODO throw http 500 here
! Dont send JWT error messages to the client
! Let exception handler handles this error
*/
throw err
}
}
}
페이로드 서명 및 토큰 확인
//* app.js
const { signToken, verifyToken } = require('./jwt')
const token = signToken({ userId: 1 })
console.log({ token })
const verified = verifyToken(token)
console.log({ verified })
무슨 일이 있었는지 보자
app.js 실행
node app.js
그리고 당신은 다음과 같은 것을 보게 될 것입니다
Github repository
읽어주셔서 감사합니다.
Reference
이 문제에 관하여(RSA 서명이 있는 JWT), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/tayfunakgc/jwt-with-rsa-signature-1jd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)