JWT(JSON Web Token)

namu445 2022. 3. 2. 22:17

JWT를 사용하는 이유

  • JSON 객체 데이터를 안전하게 전송할 때
    • JWT는 데이터를 키로 서명해서 토큰을 생성한다.
  • 사용자의 Authorization 헤더 정보로 인증과 정보 조회를 진행할 때
  • SWT(Simple Web Token), SAML(Security Assertion Marup Language Tokens)과 비교
    • SAML에 비해 사이즈가 작습니다.
    • SWT는 대칭키를 이용한 서명만 가능합니다.
      • JWT와 SAML은 공개키/비공개키를 이용한 인증이 가능합니다.

 

JWT 구조

Header

  • 일반적으로 헤더는 두 영역(토큰 타입, 암호화 알고리즘)을 포함합니다.
  • 헤더는 Base64로 인코딩되어 JWT에 포함됩니다.

Payload

  • 페이로드에는 사용자가 작성한 데이터를 포함합니다.
  • 페이로드는 Base 64로 인코딩됩니다.

Signature

  • 헤더, 페이로드를 비밀 키로 서명합니다.

HS256방식을 사용했을 때 생성된 토큰의 예시

 

발급받은 토큰을 이용한 인증 방법

 

JWT를 이용한 토큰 생성방법

const jwt = require('jsonwebtoken');

const token = jwt.sign({userId: user._id, user_nick: user.user_nick}, `${jwtSecret}`);
res.send({
        token,       
    });

 

 

JWT 사용 주의 사항

  • 만료 기간을 신중히 정하자 너무길면 해킹 됬을 때 피해가 늘어날 수 있고 너무 짧으면 사용자 불편이 심할 수 있다.(리프레시 토큰으로 보완 가능)
  • 페이로드의 데이터는 쉽게 노출될 수 있습니다. 중요한 데이터를 포함해서는 안됩니다.

 

 

<참고>

https://jwt.io/introduction

'' 카테고리의 다른 글

Routing, Router?(express)  (0) 2022.01.21
미들웨어  (0) 2022.01.21
Express.js?  (0) 2022.01.21
웹 서버?  (0) 2022.01.21
HTTP  (0) 2022.01.21