JWT의 모습
xxxxx.yyyyy.zzzzz
header.payload.signature
JWT 웹 토큰의 헤더 정보
- typ: 토큰의 타입, JWT만 존재
- alg : 해싱 알고리즘. (HMAC, SHA256, or RSA). 토큰 검증시 사용.
{ "typ" : "JWT", "alg" : "HS256" } /* 이것들의 내용을 base64 로 인코딩 합니다. base 64는 암호화된 문자열이 아니고, 같은 문자열에 대해서는 항상 같은 문자열을 반환합니다. */
JWT 웹 토큰의 중간, 실제 토큰으로 사용하려는 데이터가 담기는 부분,
각 데이터를 Claim이라고 하고 3가지가 있습니다.
Reserved claims : 이미 예약된 Claim.
Public claims : 사용자 정의 Claim
Private claims : 사용자 정의 Claim
{
"name" : "spongeBob",
"age" : 26
}
Header 와 Payload의 데이터 무결성과 변조 방지를 위한 서명
Header + Payload 를 합친 후, Secret 키와 함께 Header의 해싱 알고리즘으로 인코딩secret읜 나만의 것 (아무거나 정의해도됨, 해커가 못 찾음)
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
)
verify로 토큰을 확인해본다.
jwt.sign(payload, secretOrPrivateKey, [options, callback])
const jwt = require('jsonwebtoken');
const payload = {
name : 'spongeBob',
email : 'hello@gmail.com',
exp : Date.now()/1000 + 60 * 60 // 60 은 밀리세컨
}