Django: промежуточное ПО для шифрования токенов JWT и настройки файлов cookiePython

Программы на Python
Anonymous
Django: промежуточное ПО для шифрования токенов JWT и настройки файлов cookie

Сообщение Anonymous »

Я работаю над реализацией шифрования токена JWT в своем приложении Django, используя rest_framework_simplejwt. Я создал собственное промежуточное программное обеспечение TokenEncryptionMiddleware, которое шифрует токены доступа и обновления перед установкой их в виде файлов cookie. Однако клиентская сторона, похоже, получает незашифрованный ответ от TokenObtainPairView.
Что мне здесь не хватает? Существуют ли какие-либо взаимодействия между rest_framework_simplejwt и пользовательским промежуточным программным обеспечением, о которых мне нужно знать, чтобы мое шифрование работало должным образом?
Вот мой код промежуточного программного обеспечения:

Код: Выделить всё

"""
Middleware for crypting the JWT tokens before setting them as cookies.
"""

from base64 import urlsafe_b64encode
from cryptography.fernet import Fernet
from django.conf import settings
from django.utils.deprecation import MiddlewareMixin

class TokenEncryptionMiddleware(MiddlewareMixin):
"""
Middleware to encrypt the JWT tokens before setting them as cookies.
"""

def process_response(self, request, response):
"""
Encrypts the JWT tokens before setting them as cookies.
"""
if response.status_code == 200 and (
"access" in response.data and "refresh" in response.data
):
base_key = settings.JWT_KEY.encode()[:32]
cipher = Fernet(urlsafe_b64encode(base_key))

encrypted_access_token = cipher.encrypt(
response.data["access"].encode()
).decode()
encrypted_refresh_token = cipher.encrypt(
response.data["refresh"].encode()
).decode()

del response.data["access"]
del response.data["refresh"]

response.set_cookie(
"access_token",
encrypted_access_token,
httponly=True,
secure=True,
samesite="Strict",
)
response.set_cookie(
"refresh_token",
encrypted_refresh_token,
httponly=True,
secure=True,
samesite="Strict",
)

return response
Порядок промежуточного программного обеспечения

Код: Выделить всё

MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.common.CommonMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
"middlewares.crypter.TokenEncryptionMiddleware",
]
Ожидаемое поведение:
Клиент должен получить файлы cookie с именами access_token иrefresh_token, содержащие зашифрованные токены JWT.>

Подробнее здесь: https://stackoverflow.com/questions/790 ... ie-setting

Вернуться в «Python»