带有授权令牌的公共 API——是否可以保护演示令牌?

信息安全 授权 api
2021-08-22 14:08:08

我有一个 REST API 用于运行一些计算并返回结果,它有一个非常简单的令牌系统,只有授权用户才能使用该 API。

用户将他们的令牌添加到查询中,如下所示:

{
    authorization: 'my token',
    moreData: 51351,
    etc: 'etc'
}

因为这个 API 的用户通常不是程序员,所以我做了一个非常简单的网页来演示这个 API,并带有一个可以直接从网页运行的现场演示,演示它是如何工作的以及返回什么。

此演示有一个假授权令牌,显示在示例查询中。我制作了一个简单、隐藏和部分混淆的 JavaScript 函数,它在发送请求之前拦截这个假令牌并用实际令牌替换它,这可能会欺骗大多数用户。但实际在浏览器中查看来自调试工具的请求的用户将很容易看到发送的实际令牌,并且可以使用此令牌发送自己的请求。

当然,我可以限制演示令牌的速率,但这意味着正在尝试现场演示的用户可能会遇到暂时的锁定,我想避免这种情况。

是否有任何方法可以保护演示授权令牌免受需要易于使用并需要现场演示的 API 的影响?

2个回答

正如 Steffen 所说,您无法保护令牌免受用户的侵害。

我只想为更一般的“演示”Api 场景添加一个建议。听起来你的 API 没有任何存储的数据,只是对输入进行计算,所以这可能不是你关心的问题,但是你可以将它指向一个演示/沙箱,而不是让演示令牌指向你的真实 api具有有意义但不是真实数据的版本可以:

  1. 只有演示令牌 - 没有其他用户
  2. 每天自动重置
  3. 里面有少量数据而不是你的全部数据(如果你有数据)
  4. 可能不会为所有计算返回有效结果,以此要求人们从您那里获得真实帐户,而不仅仅是使用演示令牌

这对我来说会更安全,因为任何人都不会使用演示令牌触及您的实时系统,并且在您可能拥有正在销售的功能等情况下,它允许开发人员集成并确认他们已正确集成,但不会将全套功能/数据赠送给演示令牌。

无法保护令牌,因为您注意到自己的用户可以简单地查看发送了什么样的请求。由于演示站点在您的控制之下,您可以随时更改演示令牌。只要您只接受有效的令牌并且您经常更改令牌,您就会限制令牌的滥用。并且由于包含令牌的页面是由服务器生成的,您还可以生成一个特定于用户源 IP 地址的令牌,也许还有一个 cookie,这将进一步限制对令牌的任何滥用。