【发布时间】:2014-12-13 01:40:56
【问题描述】:
在 OAuth 2.0 规范的Section 4.1.2 中,有如下一组语句:
授权码必须过期 发布后不久,以减轻泄漏的风险。一种 10 分钟的最大授权代码生命周期是 推荐的。客户端不得使用授权码 不止一次。如果使用授权码超过 一次,授权服务器必须拒绝请求并且应该 撤销(在可能的情况下)之前基于 那个授权码。
我的问题是为什么授权码只能使用一次?这似乎迫使授权服务器的实现者使用 ACID 数据库,这引入了可伸缩性问题。放宽这一限制将允许完全放弃存储。
我可以看到,允许重复使用身份验证代码意味着如果恶意代理可以获取未过期的代码,他们可以获得对受保护资源的访问权限。但是 OAuth 2.0 对某些交易强制要求 TLS 并推荐给所有人,这降低了代码被盗的风险,并且假设有一个代理可以在通道上监听这个要求引入了拒绝服务的可能性(代理可以简单地提交他们发现的任何身份验证代码。)DoS 可能比违反保密性更大或更小,具体取决于具体情况。
【问题讨论】:
-
鉴于一些较弱的编程标准,很可能很容易从编写不佳的代码中获得授权代码。在这种情况下,只能使用一次代码会增加保护。
-
@RealityDysfunction 为真。这仍然意味着编写不佳的代码会向 DoS 开放,但可以合理地假设可用性通常不如机密性重要。