JWT

Angelo·2022년 1월 25일
0

REACT

목록 보기
1/5

JWT (JSON WEB TOKEN)

계정 인증 프로세스

  1. Client에서 Server로 로그인 data 전송
  2. Server에서 JWT 생성 후 Client로 전송
  3. Client는 받은 JWT를 저장하고 모든 요청의 Header에 JWT를 담아 Server로 요청한다
  4. Server는 받은 JWT 유효성 검사 후 return 값을 Client에 준다

  • Client가 JWT를 저장하는 경우는 3가지 플랫폼에 따라 다르게 이루어진다.

브라우저 : 로컬 저장소,
IOS : KeyChain
Android : SharedPreferences


  • JWT 세가지 구성 (Header, Payload, Signature)

Header는 JWT를 어떻게 계산할 것인지 판별

{
  "type" : "JWT", // 토큰 유형이 JWT임을 의미
  "alg" : "HS256" // 토큰 서명 생성을 위한 해시 알고리즘을 의미
}

Payload는 JWT에 무엇을 저장할 것인지 정의

{
  "userId" : "bbirds",
  "userName" : "Angelo",
  "email" : "ab@gmail.com",
  // 하위 부터는 선택사항
  "iss" : "Paul, manager of www.com" // JWT 발행 및 발급자
  "iat" : 15802312 // JWT가 발행된 시간
  "exp" : 15902312 // JWT 만료 시간 
}

Signature는 Header의 해시 알고리즘을 사용하는 곳
Header와 Payload를 인코딩하고 결합.
알고리즘을 사용하여 데이터를 해시.
해시 결과를 인코딩하여 서명을 얻는다.

const data = Base64UrlEncode(header) + '.' + Base64UrlEncode(payload);
  const hashedData = Hash(data, secret);
  const signature = Base64UrlEncode(hashedData);

JWT 표준 구조로 결합
header.payload.signature

const encodedHeader = base64urlEncode(header);
  /* Result */
  "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9"

  const encodedPayload = base64urlEncode(payload);
  /* Result */
  "eyJ1c2VySWQiOiJhYmNkMTIzNDVnaGlqayIsInVzZXJuYW1lIjoiYmV6a29kZXIiLCJlbWFpbCI6ImNvbnRhY3RAYmV6a29kZXIuY29tIn0"

  const data = encodedHeader + "." + encodedPayload;
  const hashedData = Hash(data, secret);
  const signature = base64urlEncode(hashedData);
  /* Result */
  "crrCKWNGay10ZYbzNG3e0hfLKbL7ktolT7GqjUMwi3k"

  // header.payload.signature
  const JWT = encodedHeader + "." + encodedPayload + "." + signature;
  /* Result */
  "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOiJhYmNkMTIzNDVnaGlqayIsInVzZXJuYW1lIjoiYmV6a29kZXIiLCJlbWFpbCI6ImNvbnRhY3RAYmV6a29kZXIuY29tIn0.5IN4qmZTS3LEaXCisfJQhrSyhSPXEgM1ux-qXsGKacQ"

  • 서버에서 JWT 검증 방법
  1. 생성했던 고유한 서명을 서버측에 안전하게 저장
  2. Client로 부터 JWT를 수신 받을때에는 서명을 얻고 동일한 알고리즘 사용 여부와 올바르게 해시된 값인지 검증한다.
  3. 서버의 서명과 일치하면 유효한 JWT
profile
나만의 학습 노트

0개의 댓글