【问题标题】:SCORM Hosting Cross-OriginSCORM托管跨域
【发布时间】:2021-05-19 00:37:20
【问题描述】:

我尝试托管一个分散在其他域上的 SCORM 电子学习模块,而不是我的 LMS(学习管理系统)正在运行。 SCORM 模块通常在它们自己的浏览器框架/窗口中运行,并直接与 LMS 通信,都在同一个域上运行。这没有问题,因为不存在安全问题。已经用我的代码尝试过这个案例,并且成功了。

要存档模块托管在其他服务器上,我尝试使用包装器之类的东西。这些包装器托管在 LMS 上,从外部加载内容并通过 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 模块的外部内容服务器的包装器模块。

也许有人有想法或可以给我一个提示。 我认为这是微不足道的事情。希望 ;) 谢谢!

【问题讨论】:

  • 您正在使用什么代码,您会看到由此产生的错误?
  • 附上测试项目。或者使用链接。如果您单击“启动模块”,则会出现一个显示错误的弹出窗口。

标签: javascript reactjs scorm scorm1.2


【解决方案1】:

您的具体问题是 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。

【讨论】:

  • expressjs.com/en/resources/middleware/cors.html 已在使用中。使用允许所有来源的默认配置。做 SCORM 跨域我使用上面提到的包,它会创建一个类似包装器的东西。
  • 不知何故未启用 CORS。做一个请求并检查。 curl -H "Access-Control-Request-Method: GET" -H "Origin: https://sosafe.de" --head https://lms0.sosafe.de 此响应不包括 Access-Control-Allow-*。因此,我认为您仍然需要在那里配置一些东西。
  • 当我在lms0.sosafe.de/v1/content 上执行 GET 操作时,我得到了 Access-Control-Allow-Origin →*
  • 所以 LMS 不是问题。内容也是因为它在没有包装器的情况下在 scormcloud 中运行。当 LMS 托管在内容服务器上时,使用包装器从相同的保护程序加载模块,它正在工作。 lms0.sosafe.de/v1/lms 所以内容交付也是可行的。问题必须在包装器中。我认为它与 postMessage 系统有关。
  • 这是安全问题,我们无法访问其他域数据,只有两种可能 1) 将所有内容托管在单个域中 2) 在服务器上启用 cors
【解决方案2】:

您可以看看这个替代 scorm 云的商业解决方案:

https://www.scormnext.es

它允许您使用 SCORM 连接器(调度程序)将您的 SCORM 内容远程分发到外部 LMS。

【讨论】:

    猜你喜欢
    • 2012-10-28
    • 2014-09-04
    • 2012-06-16
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 2022-12-15
    • 1970-01-01
    相关资源
    最近更新 更多