问题描述
我正在寻找一种在一个 Web 应用与第二个 Web 应用的前端之间安全地共享令牌的方法。
环境详情:
- webapp.local:一个 PHP 网络应用程序,它讲述一些仅限于特定用户的数据。此网络应用只能通过 VPN 访问。
- otherwebapp.example:这是一个 Zendesk 实例,它允许我们创建一个在客户端加载的插件(HTML + JavaScript)。
注意事项:
- webapp.local 和 otherwebapp.example 使用不同的域(它们不是子域)。
- otherwebapp.example 无法访问 webapp.local。但前端将能够(用户已连接到 VPN)。
我做了一些研究,发现了一些选择:
- HTTP Coockies:“SameSite”必须是“None”(reference),这是一个安全的选择吗?我做了一些测试,似乎它们需要在同一个子域中。
- JS postMessage:它需要打开一个弹出窗口或 iframe,我做了一些测试,但仍然试图让它工作。
问题是: 是否有最佳做法或其他方式在 Web 应用程序和位于其他域/应用程序上的前端之间共享敏感数据(令牌)?
解决方法
我认为没有一种完全安全的方法可以做到这一点,因为您想在客户端处理共享并且总是公开的,尽管您可以采取不同的方法,例如通过 GET 参数将请求令牌共享给第二个 webapp 并调用一个验证 API 来验证请求的来源(应该仅限于第二个 webapp 域)并验证传递的令牌,然后返回实际的会话令牌。