Access Token과 Refresh Token은 토큰 기반 인증 시스템에서 자주 사용되는 두 가지 유형의 토큰입니다. 이 두 토큰은 서로 다른 목적을 가지고 있으며, 보안성과 사용자 경험을 향상시키기 위해 함께 사용됩니다.
역할: Access Token은 사용자나 클라이언트 애플리케이션이 인증된 상태임을 증명하는 토큰입니다. 서버는 이 토큰을 통해 클라이언트가 요청하는 리소스에 대한 권한이 있는지 확인합니다.
수명: Access Token은 비교적 짧은 수명을 가지고 있습니다. 일반적으로 몇 분에서 몇 시간 정도의 유효 기간을 가지며, 이 기간이 지나면 만료되어 더 이상 사용할 수 없습니다. 짧은 수명을 가짐으로써, 토큰이 유출되었을 때의 위험을 줄일 수 있습니다.
사용: 클라이언트는 Access Token을 HTTP 요청의 헤더에 포함시켜 서버에 전송합니다. 서버는 이 토큰을 검증하고, 유효하다면 요청된 리소스를 제공하거나 작업을 수행합니다.
예시:
Authorization: Bearer <access_token>
역할: Refresh Token은 만료된 Access Token을 갱신하기 위해 사용됩니다. Refresh Token을 사용하면 사용자가 다시 로그인하지 않고도 새로운 Access Token을 발급받을 수 있습니다.
수명: Refresh Token은 Access Token보다 훨씬 긴 수명을 가집니다. 일반적으로 몇 주에서 몇 달까지 유효할 수 있습니다. 이 토큰은 민감한 정보로 간주되므로, 잘 보호되어야 합니다.
사용: 클라이언트가 Access Token이 만료되었을 때, Refresh Token을 서버에 전송하여 새로운 Access Token을 요청합니다. 서버는 Refresh Token의 유효성을 확인한 후, 새로운 Access Token을 발급합니다.
예시:
{
"refresh": "<refresh_token>"
}
Django REST Framework와 djangorestframework-simplejwt 라이브러리를 사용하여 JWT 기반 인증을 설정하면, Access Token과 Refresh Token을 사용할 수 있습니다.
클라이언트가 /api/token/ 엔드포인트에 사용자 자격 증명(예: 이메일, 비밀번호)을 POST 요청으로 보내면, 서버는 Access Token과 Refresh Token을 발급합니다.
Access Token이 만료되었을 때, 클라이언트는 /api/token/refresh/ 엔드포인트에 Refresh Token을 보내어 새로운 Access Token을 발급받습니다.
from rest_framework_simplejwt.views import (
TokenObtainPairView,
TokenRefreshView,
)
urlpatterns = [
path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
]
Access Token과 Refresh Token 발급:
/api/token/에 로그인 자격 증명을 보냅니다.요청:
{
"username": "user",
"password": "password"
}
응답:
{
"access": "<access_token>",
"refresh": "<refresh_token>"
}
Access Token 갱신:
/api/token/refresh/에 Refresh Token을 보냅니다.요청:
{
"refresh": "<refresh_token>"
}
응답:
{
"access": "<new_access_token>"
}
djangorestframework-simplejwt와 같은 라이브러리를 사용해 Access Token과 Refresh Token을 쉽게 관리할 수 있습니다.