我有一个古老的问题,也许在这里被问了很多次,但我们仍然在2022年,也许有更好的方法来解决这个问题。
我有一个API,它被注册在这个API中的一些网站(客户端)使用,这些客户端使用这个API来为私有和公共用户显示服务列表,而不需要任何身份验证。
当客户端在API中注册时,会给出一个个人访问令牌,在使用API限制滥用该API之前,为每个请求发送该令牌。
公共端访问令牌的问题是,任何人都可以拦截它,并在网站之外使用它以满足用户的愿望,这将造成很大的成本。即使我把代币的寿命缩短到10分钟,我仍然有滥用它的风险。
除了对每个请求的客户端进行身份验证外,还有什么方法可以更好地保护这个API,以便在几秒钟内获得新令牌的生命周期?
为了更好地说明上面的问题,这就是用例:
所有这些步骤都可以由恶意用户自动执行。
编辑:我不能改变客户端的实现或要求他做任何改变,我寻找一些东西来减少滥用不是100 %,而是使滥用有点复杂,比如使用原始域名,CORS,.
发布于 2022-03-04 08:41:49
今天使用的绝大多数访问令牌都是无记名令牌。这意味着,如果令牌有效,资源服务器将接受该令牌,而不关心是谁发送了该令牌。您是对的,这意味着恶意用户可以窃取您的令牌并使用它调用您的API。攻击者有更多的方法来窃取访问令牌,而不仅仅是MITM攻击(正如问题中所指出的,使用TLS可以大大减轻攻击)。如果将令牌提供给Javascript应用程序或浏览器中的人攻击,则可以进行XSS攻击,在这些攻击中,令牌被浏览器中运行的恶意代码窃取。
这些攻击通常是通过使用短命访问令牌(甚至不到10分钟)和设置速率限制来缓解的。这通常足以防止滥用。您始终可以添加额外的保护层,例如,如果调用方的IP更改,则丢弃令牌等。
如果您需要更强的保护,那么您可以查看发送方受限的访问令牌。这些都是令牌,只能由合法客户端使用。发送这样的令牌需要客户提供更多的占有证明。然后与令牌本身一起验证这一点。
https://stackoverflow.com/questions/71340705
复制相似问题