토큰 인증 - JWT(Json Web Token) : Access Token & Refresh Token

한지석·2022년 1월 12일
1

개인공부

목록 보기
1/1

인증

프론트&앱 : 사용자 입장에서의 서비스 도입 부분
서버 : 모든 API 요청에 대해 사용자를 확인하는 작업
--> 각 요청들에 대해 누구의 요청인지 확인하고 타인에 의해 정보 유출을 막아주기 위해 필요.

JWT란 ?

 JWT(Json Web Token)이란 인증에 필요한 토큰들을 암호화시킨 토큰이다. 사용자는 Access Token(JWT Token)을 HTTP 헤더에 실어 서버로 보낸다.
 JWT는 필요한 모든 정보를 자체적으로 지니고 있다. JWT 시스템에서 발급된 토큰은 토큰에 대한 기본 정보, 전달 할 정보, 토큰이 검증됐다는 것을 증명해주는 서명을 포함하고 있다.

JWT 구조

1. Header

  • type : 토큰의 타입을 지정
  • alg : 알고리즘 방식을 지정하며, 서명(Signature) 및 토큰 검증에 사용

2. Payload

 토큰에서 사용할 정보의 조각들인 클레임(claim)이 담겨 있음

  • Register Claim(등록된 클레임)
    토큰 정보를 표현하기 위해 이미 정해진 종류의 데이터들.
  • Public Claim(공개 클레임)
    사용자 정의 클레임으로 공개용 정보를 위해 사용. 충돌 방지를 위해 URL 포맷을 사용.
    // { "https://naver.com": true }
  • Private Claim(비공개 클레임)
    사용자 정의 클레임으로 서버와 클라이언트 사이에 임의로 지정한 정보를 저장.
    // { "token_type": access }

3. Signature

토큰을 인코딩하거나 유효성 검증을 할 때 사용하는 고유한 암호화 코드

JWT의 장/단점

장점

  • 사용자 인증에 대한 모든 정보가 토큰에 포함돼 별도의 저장소가 필요 없음
  • 트래픽에 대한 부담이 낮음
  • 확장성 우수
  • 유지보수에 유리
  • 별도의 인증 시스템(Google, Facebook으로 로그인)에 접근 가능

단점

  • 정보가 많아질수록 토큰의 길이가 늘어나 네트워크에 부하 발생 가능
  • 공격 당할 가능성이 있음
  • 노출 가능성으로 저장할 수 있는 정보가 제한적
  • 암호화가 풀릴 가능성 존재

Access Token + Refresh Token

Refresh Token 의 필요성

  • Access Token의 유효기간을 짧게 하면 사용자가 로그인을 자주 해야 함 --> 불편함을 줄일 수 있는 방법으로 나온 것이 Refresh Token
  • Refresh Token의 유효기간이 만료된다면 사용자가 재 로그인을 해주면 됨 -->
    Refresh Token도 탈취 가능성이 있기 때문에 적절한 유효기간 설정 필요

인증 과정

    1. 로그인
    2. 회원 DB에서 값 비교
    3-4. Access/Refresh Token 발급. 회원 DB에 Refresh Token을 저장해 둠.(일반적)
    5. 사용자가 Refresh Token을 안전한 저장소에 저장. Access Token을 헤더에 실어 데이터 요청.
    6. Access Token 검증.
    7. 요청 데이터 송수신(서버->사용자)

Access Token 만료시

  1. Access Token을 헤더에 실어 요청 보냄.
  2. 서버에서 Access Token의 만료를 확인 후 권한 없음 신호 보냄.(서버 -> 사용자)
  3. 사용자는 Refresh Token + Access Token을 서버로 보냄.
  4. Access Token 조작 확인 후 수신 Refresh Token & DB의 Refresh Token을 비교해 동일하고 유효기간 유효 시 새로운 Access Token을 발급.

    (사용자(프론트엔드)에서 Access Token의 Payload를 통해 유효기간을 알 수 있음. 따라서 프론트엔드 단에서 API 요청 전에 토큰이 만료됐다면 바로 재발급 요청을 할 수도 있음.)

참고
https://velog.io/@wldus9503/JWTJson-Web-Token%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C
https://velog.io/@seomoon/Web-세션쿠키-인증과-토큰-인증Access-Token-Refresh-Token
https://tansfil.tistory.com/59

profile
한지석일대기

0개의 댓글