Immersive JWT

미숙한 초보 코딩.Js·2019년 9월 7일
0

JWT (Json Web Token)

JWT의 모습
xxxxx.yyyyy.zzzzz
header.payload.signature

JWT 웹 토큰의 헤더 정보

  • typ: 토큰의 타입, JWT만 존재
  • alg : 해싱 알고리즘. (HMAC, SHA256, or RSA). 토큰 검증시 사용.
{ 
	"typ" : "JWT",
    "alg" : "HS256"
}
/*
이것들의 내용을 base64 로 인코딩 합니다.
base 64는 암호화된 문자열이 아니고, 같은 문자열에 대해서는 항상 같은
문자열을 반환합니다.
*/

Payload

JWT 웹 토큰의 중간, 실제 토큰으로 사용하려는 데이터가 담기는 부분,
각 데이터를 Claim이라고 하고 3가지가 있습니다.

  1. Reserved claims : 이미 예약된 Claim.

    • iss (String) : issuer, 토큰 발행자 정보
    • exp (Number) : expiration time, 만료일
    • sub (String) : subject, 제목
    • aud (String) : audience,
    • More
  2. Public claims : 사용자 정의 Claim

    • Public 이라는 이름처럼 공개용 정보
    • 충돌 방지를 위해 URL 포맷을 이용해 저장
  3. Private claims : 사용자 정의 Claim

    • Public claims 와 다르게 사용자가 임의로 정한 정보
{
	"name" : "spongeBob",
     "age" : 26
}

Signature

Header 와 Payload의 데이터 무결성과 변조 방지를 위한 서명
Header + Payload 를 합친 후, Secret 키와 함께 Header의 해싱 알고리즘으로 인코딩

secret읜 나만의 것 (아무거나 정의해도됨, 해커가 못 찾음)

	HMACSHA256(
    	base64UrlEncode(header) + "." + 
      	base64UrlEncode(payload),
      	secret)
    )

verify

verify로 토큰을 확인해본다.

sign

	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 은 밀리세컨 
    }
profile
힘들땐 블로그 하나더 적자!!![ Suyang ]

0개의 댓글