如何通过pubsub在Shell应用程序与微型应用程序前端之间安全地通信

问题描述

我有一个shell应用程序,它是执行所有API通信的容器应用程序。另外,我确实有多个Micro应用程序,它们只是将API请求信号广播到Shell应用程序。

现在,牢记安全性,作为外壳应用程序,它如何确保API请求信号来自我拥有的受信任的微型应用程序。

确切地说,我想问的是,有没有一种方法可以让Shell应用程序知道信号来自它拥有的微型应用程序,而不是来自任何不受信任的(例如hacking,XSS)源

解决方法

从您的问题出发,目前尚不清楚您的应用是在iframe中运行还是直接加载到页面中。

在使用iFrame的情况下,您可以使用postMessage,并且可以通过event.origin检查收到消息的来源。将此与允许的域列表进行比较。

如果您的微型应用程序直接位于您的页面上,则只需控制允许哪些内容即可加载。

,

根据Micro-Frontend体系结构,每个Micro Frontend都应调用其自己的API(微服务)。但是,您的Shell应用程序可以提供一些公共/全局库,这些库可以帮助Micro Frontends进行AJAX调用。但是拨打电话的责任必须由各个微型前端承担。

,

因此,在大多数微前端中,每个微应用程序都会对后端的相应微服务执行自己的API调用,而Shell应用程序对此一无所知。相对于此,shell应用程序要做的最多就是将一些应用程序配置传递给所有具有类似后端各种主机名的微应用程序的配置,如果所有后端都使用相同的auth,则传递一个auth令牌。

但是要确保外壳应用程序没有广告,例如带有恶意代码的广告试图将其伪装成另一个微型应用程序。

  1. 微应用程序如何与外壳通信?是否有常见的自定义事件?入侵者必须知道customEvent的名称,但这只是默默无闻的安全性,不是真实的。

  2. 诸如postMessage之类的其他方法位于窗口对象之间,我认为这对您没有帮助。

您可能可以重复使用外壳程序和微应用程序都知道的authToken,因为它是在启动时进行通信的。但是,如果您有来来去去的微型应用程序,那么它们也不起作用。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...