JWT (JSON Web Token) 이란?

DAUN JO·2021년 7월 14일
0

TIL

목록 보기
9/17

Access Token

이번 프로젝트에서 Access Token으로 JWT를 사용했다.
JWT의 특징은 다음과 같다.

  • 사용자 정보를 JSON 객체에 담아 이를 암호화하고 해싱 작업을 거쳐 문자열 토큰을 생성한다.
  • 클라이언트로 발행될 수 있다.
  • 일정 기간만 존재한다 (자동 만료)
  • JSON 형식으로 정보를 저장할 수 있다.
  • 사용자를 Local에서 검증할 수 있기 때문에 API 호출 횟수를 줄일 수 있다.
  • Client는 요청 시 JWT Token을 Header에 실어 서버로 보내야 한다.


JWT 인증 (로그인)

  1. Front에서 Login 요청
  2. Server에서 JWT 발급
  3. 발급한 JWT를 Front단(web)으로 보낸다.
  4. 이 후 Front단은 요청시 발급받은 JWT를 header에 담아 함께 보낸다.
  5. Server에서 JWT에 포함된 Signature를 확인 후 User의 정보를 보내준다.
  6. Server에서 Front단의 요청을 처리한다.
  7. Front로 Response를 보낸다.


LocalStorage

로그인 이 후 요청이 있을 시 JWT를 함께 보내줘야 한다. (인증절차)
그래서 Client는 JWT을 유지하고 있어야 한다.

유지하기 위한 방법으로는 크게 LocalStorage와 Cookie가 있는데, 대부분 LocalStorage 저장방식은 금지한다. XSS 공격에 취약하기 때문이다.

그러나 나는 이번 프로젝트에서 LocalStorage에 JWT를 보관하는 방식으로 JWT Auth를 처리했다.


JWT의 구조

  • header
    Token의 타입과 해싱 알고리즘을 지정한다. Token을 검증할 때 사용
  • payload
    Token에 담을 정보이다.
    Token은 claim(정보의 조각)으로 이루어져 있으며 name/value 쌍으로 이루어져 있다.
    const payload = {
    	"userId" : "testId",
        "userName" : daunJo"
    }
    
    const encodepayload = new Buffer(JSON.stringify(payload)).toString('base64').replace('=','');
  • signature
    header의 인코딩 값, 정보의 encoding 값을 합친 후 주어진 secret key로 해시를 하여 생성한다.

https://jwt.io/ 에서 JWT의 구조를 쉽게 확인할 수 있다



Reference

https://www.vaadata.com/blog/jwt-tokens-and-security-working-principles-and-use-cases/

https://velog.io/@heumheum2/JWT-%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EC%9D%B8%EC%A6%9D%EB%B0%A9%EC%8B%9D

https://victorydntmd.tistory.com/116

profile
🍕

0개의 댓글