Получить Chromecast для запуска в безопасном контексте при подключении к локальному серверу разработки - PullRequest
0 голосов
/ 03 марта 2020

Я принял кодовую базу для приложения Chromecast для одного из наших основных клиентов. Это было передано мне, потому что первоначальный разработчик недавно покинул нашу компанию. Однако, попытавшись выполнить передачу, мы были удивлены, обнаружив, что клиент Chromecast (простой JavaScript SPA) не запускается, когда он находится на моей машине! Содержание требует использования navigator.requestMediaKeySystemAccess API для видео с защитой DRM, которое недоступно на моем хосте, но доступно на моем бывшем коллеге.

После долгих расследований причина root кажется тот факт, что Chromecast не считает хост моего сервера разработки (что-то вроде http://10.1.2.75:4301) "безопасным контекстом" - API navigator.requestMediaKeySystemAccess доступен только в таких безопасных контекстах. Однако старый разработчик этого проекта подключал Chromecast к их локальному dev-серверу (что-то вроде http://10.1.2.89:4301) просто отлично в течение более 2 лет, он был совершенно удивлен, обнаружив, что это не так работать на кого-то еще. Мы провели множество тестов для разных конфигураций, пробовали приводить из разных источников, подключаться к машинам разных людей и т. Д. c но всякий раз, когда мы проверяли window.isSecureContext на его хосте, он возвращал true - а на моем он возвращал false.

Насколько я понимаю, в принципе не должно быть сценария, где isSecureContext должно быть истинным на любом виде http соединения, и все же это было в значительной степени так на машине моего бывшего коллеги - и было в течение длительного периода времени. Если бы это было не так, и это был новый проект, который я начинал, я бы сразу сказал: «Нам нужно разработать это на каком-то HTTPS-соединении», и все же имеющиеся у меня доказательства опровергают это.

Как я могу заставить Chromecast доверять моему браузеру настолько, чтобы он мог выставить этот navigator.requestMediaKeySystemAccess API - это все, что мне нужно, чтобы этот проект работал без какого-либо локального туннеля, такого как ngrok (который это то, что я должен сделать в данный момент, и это вызывает все виды проблем). В Chrome вы можете явно указывать веб-сайту доверять небезопасному контенту. Можно ли это сделать на устройстве Chromecast? Есть ли способ заставить его доверять самозаверяющему сертификату или чему-то еще?

И, наконец, я не могу реально сделать много вещей на сетевом уровне, таких как установка частного ЦС и предоставление сертификатов для машин разработчика и т. Д. c, поскольку мы довольно маленькая компания с небольшими нет внутренней архитектуры (так что нам не нужно ничего поддерживать). Мне также не нравится идея рассказывать будущим разработчикам об этом проекте, что способ запуска этого проекта - «длинный список махинаций, которые только я понимаю».

Любая помощь или совет по этому вопросу будут высоко оценены !

Обновление : я случайно оставил свой Chromecast, указывающий прямо на мой локальный сервер разработки, и сумел воссоздать рабочий сценарий, на котором я сделал снимок экрана. Я предполагаю, что это не продлится очень долго, так что именно об этом я и говорю. Это возможно:

A picture of the dev tools console showing that location.href is http://10.1.2.75:4301 and isSecureContext is true

...