我们的应用程序是使用Angular和ASP.NET Core构建的单页应用程序。我们必须集成另一个网络应用程序,我们将在应用程序的iframe中集成该应用程序。该应用程序必须在用户完成工作后将数据发送回我们的应用程序。
我需要确保,我可以将来自该应用程序的数据与通过身份验证的用户联系起来,该用户以安全的方式在我们的应用程序中启动操作。
这些是我在实现接口时想到的选项:
-
在我们的应用程序中生成一个唯一的令牌,该令牌了解相关用户并传递给其他应用程序。另一个应用程序将此令牌及其其他数据传输回我们的应用程序,我们可以在后端检查此令牌,以确定它是否是合法请求,并将其与用户关联。
-
在我们的应用程序中对用户进行身份验证后存储cookie,这样其他应用程序就可以将数据发布到我们的端点,cookie可以确保调用在经过身份验证的用户的上下文中进行。此外,我们可能不得不允许来自该网站的CORS来实现这一点。
-
使用非基于http的中间件(消息代理(以某种方式连接系统,从而将数据传输排除在浏览器之外。
-
将Bearer令牌从我们的应用程序传输到其他应用程序,这样其他应用程序就可以对我们的应用后端进行身份验证调用。对于其他应用程序的来源,CORS也必须被激活。然而,我有点担心这可能带来的安全隐患。
你建议哪种方式?或者你会建议一种完全不同的方式来实现目标吗?
非常感谢你的建议!
编号2和4都有潜在的安全问题。应该避免在不同的应用程序之间传递身份验证上下文,而应该独立地对每个应用程序进行身份验证。
第3个会增加您的体系结构的复杂性,同时对您的用例几乎没有好处——消息代理的配置和操作并非易事。我还想问,为什么两个应用程序需要通过和iFrame集成在客户端中,但却能够以某种方式共享消息代理。
对我来说,第一个是你想法中最干净的选择。然而,考虑一下,您需要在客户端以某种方式传递此令牌,这可能会打开安全漏洞。想想如果邪恶的第三方获得该代币,可能会发生什么负面影响。
在你的位置上,我会质疑为什么要使用iFrame。您的应用程序是否可以提供UI,并通过API与其他应用程序进行通信?