如何最好地保护 iframe 小组件中的 API 密钥

How to best secure an API key in an iframe widget

提问人:user1022788 提问时间:3/2/2023 更新时间:3/3/2023 访问量:516

问:

我正在开发一个 Javascript 小部件,它将使用 Iframe 嵌入到客户端站点上。

小部件代码使用 API 密钥对我的后端服务进行 API 调用。每个不同客户端的 API 密钥将更改。

目前,API 密钥在 iframe src 标签中可见。这意味着任何人都可以轻松地在页面源代码中找到 API 密钥,而未经授权的用户也可以进行 API 调用。

在这种情况下,保护 API 访问的最佳方法是什么?我考虑过使用客户端密钥来加密 API 密钥,但这并不能解决问题,因为任何拦截密钥的人仍然可以在 API 后端进行验证和调用。

网上已经有一些关于这个问题的问题,但没有一个关于如何实施的详细建议。

我的小部件是由React.js应用程序生成的HTML,API后端是Ruby on Rails。

Ruby-on-Rails Ruby 安全 API 密钥

评论

0赞 Mark 3/2/2023
您如何确定不同的客户?他们的 IP 地址?听起来你基本上想静默地登录他们(也许用他们的 IP 作为他们的“用户名”),并使用 rails 和 design 为他们分配一个 JWT,然后在请求之间来回传递
2赞 dbugger 3/2/2023
正如你所发现的,纯粹的客户端解决方案是不可能的。服务器端解决方案是使用 API 密钥从客户端站点服务器调用 API,以获取即将过期的令牌。使用即将过期的令牌呈现小部件,并将其发送到您的 api。您的 API 将使用令牌验证请求。由于代币的寿命有限,因此不太可能重复使用。您还可以为令牌提供有限数量的使用。

答:

1赞 Ryan Kopf 3/3/2023 #1

谷歌地图允许您嵌入地图,例如 https://mapsurl.com/?address=123Street&api_key=KDFJSDKFHSH

关键是公开的。它之所以安全,是因为他们检查了引荐来源网址。它不能在其他网站上使用,因为它们会发送错误的推荐人。因此,如果您要创建一个人们可以嵌入到其网站中的小部件,则可以从他们那里收集嵌入将来自的 URL,并在没有该引用的情况下拒绝请求。