Кэширование результатов аутентификации в 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)
Вернуться на верх