Authentication

Access Token & Refresh Token

NiceKHJ 2024. 12. 1. 14:40

Access 토큰 과 Refresh 토큰을 알기위해 jwt 토큰에 대해 먼저 파악하는게 좋습니다.

 

https://nicekhj.tistory.com/67

 

JWT 토큰 이란??

JWT(Json Web Token)은 클라이언트와 서버 간에 안전하게 전송하기 위해 사용되는 방법입니다.목적은 사용자 인증과 정보 교환 입니다. JWT는 정보가 담긴 JSON 객체를 비밀키로 서명하여 위변조를 방

nicekhj.tistory.com

 

JWT(Json Web Token)는 Access Token을 구현하는 대표적인 방식 중 하나로 이 둘의 관계를 이해하려면 JWT에 대한 개념을 먼저 파악하는 것이 중요합니다.

 

JWT는 JSON 형식의 데이터를 안전하게 전송하기 위해 사용되며 일반적으로 클라이언트와 서버 간의 인증과 정보 교환을 목적으로 사용됩니다. JWT는 특정한 형식(Header,Payload, Signature)으로 구성되며 서명을 통해 데이터의 무결성을 검증합니다.

 

Access Token은 특정 리소스에 접근할 수 있는 권한을 인증하기 위해 사용되는 토큰으로 JWT 형식으로 구현되는 경우가 많습니다. Access Token은 보통 짧은 유효 기간을 가지며 클라이언트가 서버 API에 요청을 보낼 때 인증 정보를 포함하기 위해 사용됩니다. 

 

JWT와 Access Token의 차이점

구분 JWT Access Token
정의 JSON 형식을 사용하여 정보를 안전하게 전송 하기 위한 표준 인증 후 API 등 접근할 권한을 부여하는 토큰
포맷 JWT 형식(헤더,페이로드,서명)으로 고정 JWT 형식을 사용할 수도 있지만 단순 문자열 등 다양한 형식으로 구현 가능
역할 데이터를 포함하고 인증 정보를 검증하기 위한 표준 방식 자원 접근 권한을 증명하기 위해 사용하는 인증 수단
유효성검증 토큰 자체에 담긴 서명을 확인하여 검증 액세스 토큰이 JWT 형식이면 서명 검증 , 단순 문자열일 경우 별도 DB 조회를 통해 검증 가능
만료시간 JWT 자체에 설정된 만료 시간을 따름 일반적으로 액세스 토큰은 짧은 만료시간을 가짐(10분~1시간)
사용예시 사용자 로그인 후 JWT를 반환하여 클라이언트가 이를 저장하고 인증 요청 시 사용 API 요청 시 서버로 전달하여 인증 및 권한 검증을 수행 
추가기능 서명 기반으로 자체적으로 유효성을 검증 가능하며 정보 교환에도 사용됨 주로 인증된 사용자의 특정 자원 접근 권한을 제한하는 용도로 사용됨

 

 

JWT와 Access Token의 관계

  • JWT는 Acess Token의 구현 방식 중 하나
    • JWT는 액세스 토큰을 JSON 형식으로 구현할 때 사용됩니다.
    • 꼭 JWT 형식을 사용할 필요는 없습니다.

 

Refresh Token 과 Access Token

Access Token 이란 ?

Access Token은 사용자가 서버에서 인증을 완료한 후 특정 리소스에 접근할 수 있는 권한을 부여받을 때 사용하는 인증 토큰입니다. 이 토큰은 짧은 유효 기간을 가지며 주로 클라이언트가 서버로 API 요청을 보낼 때 Authorization 헤더에 포함되어 전달됩니다.

 

주요 특징 :

  1. 짧은 유효 기간 : 보안 문제를 방지하기 위해 보통 몇분에서 몇 시간 단위로 사라집니다.
  2. 즉각적인 인증 : 토큰 자체에 사용자 정보가 포함되어 있어 별도의 데이터베이스 조회 없이 서버에서 인증이 가능합니다.
  3. 사용 목적 : 리소스에 대한 접근 권한을 증명하는 역할

Refresh Token 이란 ?

Refresh Token은 Access Token의 만료 후 새로운 Access Token을 발급받기 위해 사용되는 토큰입니다.

 

주요 특징 :

  1. 긴 유효기간 : 일반적으로 몇주에서 몇 달의 유효 기간을 가지며 Access Token보다 더 안전한 방식으로 관리합니다.
  2. DB에 저장 : 클라이언트에서 직접 사용되지 않고 서버에서 관리되며 주로 데이터베이스에 저장합니다.
  3. 사용 목적 : 만료된 Access Token을 갱신하여 사용자 경험을 유지하고 보안을 강화합니다.

 

Refresh Token 과 Access Token의 필요성

Access Token의 짧은 유효 기간을 설정하는 이유

  1. 보안성 강화 : Access Token이 탈취될 경우 짧은 만료 시간이 지나면 사용 불가능한 무효화된 문자열이 되므로 피해를 최소화할 수 있습니다.
  2. 데이터 보호 : 민감한 데이터가 장기간 노출되지 않도록 보호합니다.

왜 Refresh Token을 사용하는가?

Access Token의 유효 기간을 짧게 설정하면 사용자가 일정 시간마다 재로그인을 해야 하는 불편함이 생깁니다.

Refresh Token은 이 문제를 해결해주며 사용자가 재로그인 없이 Access Token을 받을 수 있게 도와줍니다.

 

Refresh Token과 Access Token의 동작 원리

  1. 로그인 : 사용자가 로그인하면 서버에서 정보가 일치하는지 확인하고 Access Token과 Refresh Token을 발급합니다.
  2. API 요청 : 클라이언트는 API 요청 시 Access Token을 헤더에 포함하여 보냅니다.
  3. Access Token 검증 : 서버는 Access Token의 유효성을 검사하고 유효하다면 요청에 응답합니다.
  4. Access Token 만료 : AccessToken이 만료되면 서버는 토큰이 만료되었으니 Refresh Token을 보내라는 응답을 보냅니다.
  5. Refresh Token 검증 : 
    • 클라이언트는 만료된 Access Token과 Refresh Token을 서버로 보냅니다.
    • 서버는 Refresh Token의 유효성을 확인하며 데이터베이스에 저장된 Refresh Token과 비교합니다.
  6. Access Token 재발급 : Refresh Token이 유효하다면 새로운 Access Token을 발급하여 클라이언트에 전달합니다.
  7. Refresh Token 만료 :  Refresh Token도 만료되었다면 사용자는 다시 로그인해야 합니다.
    • [Refresh Token은 로그인할때마다 새로 갱신]

 

# 정상일 때

#이미지 출처 : 잔다리 블로그 https://jandari91.github.io/posts/JWT_Refresh/

 

# Access Token이 만료 되었을 때

#이미지 출처 : 잔다리 블로그 https://jandari91.github.io/posts/JWT_Refresh/