Apache 403 загрузка видео через HTML5 Видеоплеер - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть Django приложение для потоковой передачи видео. Приложение использует drf_firebase_auth. Я тестировал потоковое видео, используя Postman, библиотеку запросов Python и видеопроигрыватель HTML5 (с использованием аутентификации cook ie после входа в систему).

Когда приложение запускается локально потоковое видео работает при вызове Postman, библиотека запросов Python и проигрыватель HTML5. Когда приложение запускается на AWS, потоковое видео работает через Postman и библиотеку запросов Python, но при попытке потоковой передачи через видеоплеер HTML5 происходит сбой с 403.

Во время отладки I поместите операторы печати в код drf_firebase_auth. Операторы печати появляются в журнале ошибок apache, когда видео передается в потоковом режиме (т. Е. С помощью почтальона или Python запросов), но не при вызове с проигрывателя HTML5. Кажется, это указывает на то, что 403 происходит до того, как вы получите Django.

. Любое руководство по отладке приветствуется.

Спасибо.

1 Ответ

0 голосов
/ 13 апреля 2020

Моя проблема заключалась в неправильном понимании некоторых процессов Django аутентификации, забывании очищать куки и пакете drf_firebase_auth, не поддерживающем аутентификацию cook ie.

Для поддержки аутентификации cook ie при использовании drf_firebase_auth Я расширил пакет и переопределил функцию get_token. Функция get_token была изменена, чтобы искать повар авторизации ie, когда заголовок авторизации не найден.

Это правильный способ сделать это?

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]

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...