SCORM Хостинг Cross-Origin - PullRequest
6 голосов
/ 06 мая 2019

Я пытаюсь разместить модуль электронного обучения SCORM, децентрализованный в другом домене, чем моя LMS (система управления обучением). Модули SCORM обычно работают в своем собственном фрейме / окне браузера и напрямую взаимодействуют с LMS, работая в одном домене. Это не проблема, потому что нет проблем с безопасностью. Я уже пробовал этот случай с моим кодом, и это сработало.

Для архивации модуля размещен на другом сервере, я пытаюсь использовать что-то вроде оболочки. Эти оболочки размещаются в LMS, загружают контент из extern и обмениваются данными через postMessage с LMS. Я попробовал этот проект с открытым исходным кодом: https://github.com/Didask/scol-r

Но я не понимаю, как это работает. Каждый раз, когда я заканчиваю с ошибкой: Error grabbing 1.2 API-SecurityError:Blocked a frame with origin "https://..." from accessing a cross-origin frame. Protocols, domains, and ports must match. Так что пытайтесь получить доступ к чему-то, что не разрешено. Исключение возникает в методе «SCORM_ScanParentsForApi».

Я уже спрашивал автора проекта, но у него не было ответа вообще. Я запустил небольшой демонстрационный проект по реакции на симуляцию LMS. Добавлен модуль-обертка, который указывает на мой внешний контент-сервер, где находится модуль SCORM.

Может быть, у кого-то есть идея или может дать мне подсказку. Я думаю, что это что-то тривиальное. С надеждой ;) Спасибо!

1 Ответ

1 голос
/ 08 мая 2019

Ваша конкретная проблема - заголовок Access-Control-Allow-Origin https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS/Errors/CORSAllowOriginNotMatchingOrigin

Итак, мы находимся на sosafe.de, а курс skorm на lms0.sosafe.de. Это приведет к ошибкам CORS.Вам нужно, чтобы ваши заголовки ответа были приняты.

Вы можете сделать это с помощью вашей конфигурации Apache.Это позволит получить ответ.

SetEnvIf Origin "http(s)?:\/\/(.+\.)?sosafe\.de(:\d{1,5})?$" CORS=$0

Header set Access-Control-Allow-Origin "%{CORS}e" env=CORS
Header merge  Vary "Origin"

Вам не нужно использовать этот код точно, но измените сервер, добавив заголовок Access-Control-Allow-Origin.Если вы сделаете Access-Control-Allow-Origin: *, это разрешит запросы из разных источников откуда угодно (хотя вы должны просто разрешить домены, которым доверяете).Это должно решить вашу проблему.

В противном случае они должны находиться в одном домене.что может быть невозможно из-за конструкции SCOL-R соединителя scorm, который позволяет вам обращаться к API.

...