Tích hợp SimpleJWT cho Xác thực trong Django REST Framework
SimpleJWT là một thư viện cung cấp cơ chế xác thực JSON Web Token cho Django REST Framework. Đây là giải pháp thay thế cho django-rest-framework-jwt đã ngừng phát triển từ năm 2017.
Cài đặt
Để bắt đầu, cài đặt SimpleJWT qua pip:
pip install djangorestframework-simplejwt
Cấu hình Cơ sở
Trong tệp settings.py, thêm lớp xác thực JWT vào cấu hình REST_FRAMEWORK:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_simplejwt.authentication.JWTAuthentication',
# các lớp xác thực khác nếu cần
),
}
Định tuyến API
Trong tệp urls.py của dự án, thêm các endpoint để lấy và làm mới token:
from rest_framework_simplejwt.views import (
TokenObtainPairView,
TokenRefreshView,
)
urlpatterns = [
# các URL khác
path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
]
Localization (Tùy chọn)
Nếu cần hỗ trợ ngôn ngữ, thêm SimpleJWT vào INSTALLED_APPS:
INSTALLED_APPS = [
# các ứng dụng khác
'rest_framework_simplejwt',
]
Kiểm tra hoạt động
Sử dụng công cụ API để kiểm tra endpoint tạo token:
Endpoint /api/token/ sẽ trả về hai loại token:
- access token: Mặc định có hiệu lực trong 5 phút
- refresh token: Có hiệu lực trong 1 ngày, dùng để làm mới access token khi nó hết hạn
Endpoint /api/token/refresh/ sử dụng refresh token để tạo access token mới.
Cấu hình chi tiết
Trong settings.py, bạn có thể tùy chỉnh nhiều thông số của SimpleJWT:
from datetime import timedelta
SIMPLE_JWT = {
'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5), # Thời gian hiệu lực của access token
'REFRESH_TOKEN_LIFETIME': timedelta(days=1), # Thời gian hiệu lực của refresh token
'ROTATE_REFRESH_TOKENS': False, # Có tạo refresh token mới khi làm mới không
'BLACKLIST_AFTER_ROTATION': False, # Có thêm token vào danh sách đen khi làm mới không
'UPDATE_LAST_LOGIN': False, # Cập nhật thời gian đăng nhập cuối cùng trong bảng user
'ALGORITHM': 'HS256', # Thuật toán mã hóa
'SIGNING_KEY': settings.SECRET_KEY, # Khóa ký
'VERIFYING_KEY': None, # Khóa xác thực
'AUDIENCE': None, # Đối tượng token
'ISSUER': None, # Người phát hành token
'AUTH_HEADER_TYPES': ('Bearer',), # Loại header xác thực
'AUTH_HEADER_NAME': 'HTTP_AUTHORIZATION', # Tên header xác thực
'USER_ID_FIELD': 'id',
'USER_ID_CLAIM': 'user_id', # Tuyên bố chứa ID người dùng
'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',),
'TOKEN_TYPE_CLAIM': 'token_type', # Tên tuyên bố loại token
'JTI_CLAIM': 'jti', # Tên tuyên bố định danh token
}
Kết luận
SimpleJWT cung cấp giải pháp xác thực JWT mạnh mẽ và linh hoạt cho Django REST Framework, với khả năng tùy chỉnh cao và dễ dàng tích hợp vào các dự án hiện có.