Кэширование результатов аутентификации в django-rest-framework-jwt
Я использую аутентификацию Auth0 в комбинации webapp / django-server. Auth0 - не самый быстрый фреймворк для аутентификации, ему всегда требуется 200 мс для аутентификации. Мой webapp посылает много запросов к серверу django, поэтому я подумал о кэшировании аутентификации на несколько секунд. Это значительно повышает скорость работы моего приложения.
Хороший ли это способ? Видите ли вы какие-либо недостатки / проблемы с безопасностью при использовании этого способа?
django config:
REST_FRAMEWORK = {
(...)
'DEFAULT_AUTHENTICATION_CLASSES': (
(...)
'rg_auth.rest_framework_authentication_classes.RgJSONWebTokenAuthentication',
(...)
),
(...)
}
класс аутентификации:
import hashlib
from rest_framework_jwt.authentication import JSONWebTokenAuthentication
from rest_framework.authentication import get_authorization_header
from django.core.cache import cache
class RgJSONWebTokenAuthentication(JSONWebTokenAuthentication):
def authenticate(self, request):
# Get from cache
cache_key = self._rg_get_cache_key(request)
cached_user_payload_tuple = cache.get(cache_key)
# Is cache set?
if cached_user_payload_tuple:
# Cache is set: Return user/payload tuple
return cached_user_payload_tuple
else:
# Cache is not set: Authenticate and save tuple to cache for 10 seconds
user_payload_tuple = super().authenticate(request)
if user_payload_tuple:
# Set cache
cache.set(cache_key, user_payload_tuple, 10)
# Return tuple
return user_payload_tuple
def _rg_get_cache_key(self, request):
auth_header = get_authorization_header(request)
auth_header_md5 = hashlib.md5(auth_header).hexdigest()
return "RgJSONWebTokenAuthentication_{}".format(auth_header_md5)