Tengo una aplicación Django que transmite videos. La aplicación usa drf_firebase_auth. He probado la transmisión de videos usando Postman, la biblioteca de solicitudes de Python y a través del reproductor de video HTML5 (usando la autenticación de cookies después de un proceso de inicio de sesión).
Cuando la aplicación se ejecuta localmente, la transmisión de video funciona cuando lo llama Postman, la biblioteca de solicitudes de Python y el reproductor HTML5. Cuando la aplicación se ejecuta en AWS, la transmisión de video funciona a través de Postman y la biblioteca de solicitudes de Python, pero falla con un 403 cuando intenta transmitir a través del reproductor de video HTML5.
Durante la depuración, puse declaraciones de impresión en el código drf_firebase_auth. Las declaraciones de impresión aparecen en el registro de errores de apache cuando se transmite el video (es decir, a través de solicitudes de cartero o Python), pero no cuando se llama desde el reproductor HTML5. Eso parece indicar que el 403 está sucediendo antes de llegar a Django.
Cualquier guía de depuración es apreciada.
Gracias.
Mi problema fue una combinación de malinterpretar algunos procesos de autenticación de Django, olvidar borrar las cookies y el paquete drf_firebase_auth que no admite la autenticación de cookies.
Para admitir la autenticación de cookies mientras usaba drf_firebase_auth, amplié el paquete y anulé la función get_token. Se modificó la función get_token para buscar la cookie de autorización cuando no se encuentra el encabezado de autorización.
¿Es esa la manera correcta de hacer esto?
import sys, os import drf_firebase_auth.authentication from drf_firebase_auth.settings import api_settings from drf_firebase_auth.settings import api_settings from rest_framework import ( authentication, exceptions ) from django.utils.encoding import smart_text class FirebaseCookieAuthentication (drf_firebase_auth.authentication.FirebaseAuthentication): def get_token(self, request): """ Parse Authorization header and retrieve JWT """ authorization_header = \ authentication.get_authorization_header(request).split() auth_header_prefix = api_settings.FIREBASE_AUTH_HEADER_PREFIX.lower() #changed code begins if not authorization_header or len (authorization_header) != 2: for k, v in request.COOKIES.items(): if k.lower() == "authorization": authorization_header = v.split (' ', 1) break #changed code ends if not authorization_header or len(authorization_header) != 2: raise exceptions.AuthenticationFailed( 'Invalid Authorization header format, expecting: JWT <token>.' ) if smart_text(authorization_header[0].lower()) != auth_header_prefix: raise exceptions.AuthenticationFailed( 'Invalid Authorization header prefix, expecting: JWT.' ) return authorization_header[1]Gracias.