[TIL] 231107_JWT

VonBielefeld·2023년 11월 7일
0

TIL

목록 보기
11/32

JWT

JWT(JSON Web Token)는 당사자간에 JSON 개체를 안전하게 전송하기 위한
컴팩트하고 독립적인 방식을 정의하는 개방형 표준(RFC 7519) 입니다.
이 정보는 디지털 서명이 되어 있으므로 확인하고 신뢰할 수 있다.
정보를 안전하게 전달하거나 또는 유저의 권한 같은 것을 체크하기 위해 사용 하는 모듈입니다.

JWT 구조

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

1) Header

토근에 대한 메타 데이터를 포함하고 있습니다.

  • typ: 토큰의 타입
  • alg: 해싱 알고리즘 (SHA256, RSA …)

2) 정보 (payload)

  • Payload 부분에는 토큰에 담을 정보가 들어가 있다.
  • Payload 에 담는 정보를 각각 클레임(claim) 명칭
  • name / value 의 한 쌍으로 구성
  • 클레임 의 종류는 크게 세 분류 나눔
    • 등록된 (registered) 클레임
      - iss: 토큰 발급자
      - sub: 토큰 제목
      - aud: 토큰 대상자
      - exp: 토큰 만료시간
      - iat: 토큰 발급 시간
      - nbf: 토큰 활성화 시간
      - jti: JWT의 고유 식별자

    • 공개 (public) 클레임
      - JWT를 사용하는 사람들이 공개적으로 정의할 수 있음
    • 비공개 (private) 클레임
      - Public Claims과 달리 오직 사용자와 서버 사이에서만 합의하여 사용하는 Claim이다

3) 서명 (Verify Signature)

  • 서명은 헤더의 인코딩값과, 정보의 인코딩값을 합친후 주어진 비밀키로 해쉬를 하여 생성

  • 토큰이 보낸 사람에 의해 서명이 되었으며 어떤 식으로든 변경되지 않았는지 확인하는 이용되는 서명

  • 서명은 헤더 및 페이로드 세그먼트, 서명알고리즘, 비밀 또는 공개키를 사용여 생성

    사용법

jsonwebtoken 패키지 설치

 npm i jsonwebtoken

jsonwebtoken 생성

jwt.sign( payload, 비밀키, 옵션, callback )
  • 비밀키
    비밀키는 외부에 노출하면 인증의 의미가 없기 때문에 .env 등을 통해 키 보호

  • expiresIn
    토큰의 유효 기간을 지정할 때 사용

jwt.sign( payload, 비밀키, 옵션, callback )
const accessToken = jwt.sign(test, secret, { expiresIn: "30s" });

jsonwebtoken 검증

jwt.verify(검증할 토큰, 비밀키, 콜백함수 )
jwt.verify(token, secretText, (err, user) => {

}

0개의 댓글