Видео, требующее аутентификации asp.net, не работает на iOS 10

В Safari в iOS 10 мое видео не работает, отображается только значок воспроизведения.

Я передаю видео через сервер asp.net, который проверяет, вошел ли пользователь в систему и имеет ли он доступ к видео. Только на iOS 10 сервер ответит 401 Unauthorized!

Проведя некоторое тестирование кода, приведенного ниже, я обнаружил, что Safari на iOS 9 отправляет файл cookie «.ASPXAUTH», а Safari на iOS 10 — нет!

<video crossorigin="use-credentials" controls autoplay="autoplay">
    <source src="/Server/GetVideo.ashx?id=123"/>
</video>

Почему Safari не может воспроизвести мое видео? Есть ли способ решить эту проблему?


person Mystogan    schedule 22.09.2016    source источник
comment
То же самое. В моем случае это приложение стека LAMP, которое также выполняет предварительную проверку через Cookie/Session. Похоже, что iOS 10 не отправляет файлы cookie при загрузке видео. Я все еще ищу решение. Я не могу поверить, что нет способа справиться с этим довольно распространенным вариантом использования.   -  person Marco    schedule 23.09.2016
comment
@FlyBy Вы уже нашли какое-нибудь решение?   -  person Hurricane    schedule 03.10.2016
comment
Извините за задержку с ответом. Похоже, вы не сможете заставить iOS загружать видео, включая файлы cookie сеанса. Мы решили эту проблему следующим образом: сгенерируйте уникальный медиа-токен для каждого пользователя. Этот токен необходимо добавлять в качестве параметра GET к каждому видеозапросу, сделанному при использовании iOS 10. Используйте медиа-токен для идентификации пользователей при запросе видеоресурсов. Таким образом, видео не обязательно должно быть полностью общедоступным, и есть хотя бы некоторый минимум безопасности. Ссылку можно скопировать и вставить, но, по крайней мере, она будет действительна только до тех пор, пока действителен сеанс пользователя.   -  person Marco    schedule 10.10.2016


Ответы (3)


Мое решение здесь: https://stackoverflow.com/a/40015409/7012293

В основном вам нужно отправить 403 запрещено, если файл cookie сеанса отсутствует. Safari повторит попытку с файлом cookie сеанса.

person Henry Yang    schedule 13.10.2016
comment
Я проверил это, и это работает! Интересное поведение сафари... Хорошая находка, спасибо за ответ! - person Mystogan; 18.10.2016

У нас точно такая же проблема с совершенно другим стеком технологий (Linux, PHP, Moodle). Наш файл cookie сеанса не отправляется с видео (и аудио) запросами.

Нам не удалось найти способ заставить iOS вести себя здесь правильно, поэтому мы делаем экстренный патч для решения проблемы, обнаруживая iOS 10 и отправляя его в другой скрипт для обслуживания видео, передавая надежно зашифрованную версию значение файла cookie сеанса внутри пути к этому скрипту, а затем выполнять различные хаки, чтобы значение из пути использовалось для идентификации сеанса внутри этого скрипта (вместо несуществующего файла cookie). Это изменение работает, но является сложным, имеет незначительные последствия для безопасности и может быть сложнее реализовать на других технологиях.

Это кажется серьезной проблемой iOS 10, поэтому я надеюсь, что она будет исправлена ​​в будущем обновлении. Кроме того, я отмечаю, что, хотя наш файл cookie сеанса не включен в видео, несколько других файлов cookie включены! На самом деле я не мог понять, какие из них не были. (Одной из первых вещей, которые я попробовал, было использование файла cookie с ограниченным сроком действия вместо файла cookie сеанса, но он также не был отправлен с видео.)

person sam    schedule 23.09.2016
comment
Я согласен, это действительно похоже на серьезную проблему с iOS. Я отправил отчет об ошибке в Apple, поэтому надеюсь, что они исправят это в небольшом обновлении. - person Mystogan; 26.09.2016

Решение можно найти здесь:

HTML5-видео/аудиоплеер включен мобильный Safari (iOS 7 и iOS 10) исключает файлы cookie

Установите срок действия файла cookie, и видеопроигрыватель в iOS 10 сможет прочитать файл cookie. Файлы cookie сеанса без даты истечения срока действия не могут быть прочитаны видеоплеером в iOS 10.

person Kalle    schedule 23.09.2016
comment
В идеале я хотел бы не устанавливать срок действия файлов cookie asp.net, сохраняя их непостоянными, но, тем не менее, спасибо за отличный ответ! Редактировать: проверил это, но, к сожалению, все еще не решил проблему. - person Mystogan; 26.09.2016