Met*_*uru 35 oauth unix-timestamp nonce
我一开始误解了OAuth的时间戳实现,认为这意味着时间戳不会超过当前时间30秒内被拒绝,但事实证明这是错误的,原因是我们无法保证无论时区如何,每个系统时钟都足够同步到分钟和秒.然后我再次阅读它以获得更清晰:
"除非服务提供商另有规定,否则时间戳以自1970年1月1日00:00:00 GMT以来的秒数表示.时间戳值必须是正整数,并且必须等于或大于之前使用的时间戳.请求."
来源:http://oauth.net/core/1.0/#nonce
这意味着时间戳仅与来自同一源的先前请求进行比较,而不是与我的服务器系统时钟进行比较.
然后我在这里阅读更详细的描述:http://hueniverse.com/2008/10/beginners-guide-to-oauth-part-iii-security-architecture/
(TL; DR? - 跳到下面的粗体部分)
为了防止再次使用受损的请求(重播),OAuth使用nonce和timestamp.术语nonce表示"一次使用的数字",是一个唯一且通常是随机的字符串,用于唯一标识每个已签名的请求.通过为每个请求提供唯一标识符,服务提供商可以防止多次使用请求.这意味着Consumer为发送给服务提供者的每个请求生成唯一字符串,并且服务提供者跟踪用于防止它们第二次被使用的所有nonce.由于nonce值包含在签名中,因此攻击者无法在不知道共享密钥的情况下更改它.
使用nonce对于服务提供商而言可能非常昂贵,因为他们要求永久存储所有收到的nonce值.为了简化实现,OAuth为每个请求添加了一个时间戳值,允许服务提供者仅在有限的时间内保留nonce值.当请求的时间戳早于保留的时间范围时,它将被拒绝,因为服务提供商不再具有该时间段的随机数.可以安全地假设在允许的时间限制之后发送的请求是重放攻击.OAuth提供了一种实现时间戳的通用机制,但实际实现只留给每个服务提供者(许多人认为应该由规范重新访问).从安全角度来看,真正的nonce是timestamp值和nonce字符串的组合.只有它们一起提供永久的唯一值,攻击者永远不能再使用它.
我感到困惑的原因是,如果Nonce仅使用一次,为什么服务提供商会根据时间戳拒绝?"服务提供商不再具有该时间段内的随机数"对我来说很困惑,并且听起来好像只能在上次使用时间的 30秒内重新使用该随机数.
所以有人可以为我清除这个吗?如果nonce是一次性使用而且我没有将时间戳与我自己的系统时钟进行比较(因为这显然不可靠),时间戳的重点是什么.有意义的是,时间戳只相对于彼此,但是由于具有独特的随机数要求,它似乎无关紧要.
Era*_*mer 33
时间戳用于允许服务器优化其随机数的存储.基本上,将读取的随机数视为时间戳和随机字符串的组合.但是通过具有单独的时间戳组件,服务器可以使用短窗口(例如,15分钟)实现基于时间的限制,并限制其所需的存储量.如果没有时间戳,服务器将需要无限存储来保持每个随机数使用.
假设您决定在时钟和客户端之间允许最多15分钟的时间差,并跟踪数据库表中的nonce值.该表的唯一键将是"客户端标识符","访问令牌","随机数"和"时间戳"的组合.当有新请求进入时,检查时间戳是否在时钟的15分钟内,然后在表中查找该组合.如果找到,请拒绝该呼叫,否则将其添加到您的表中并返回所请求的资源.每次向表中添加新的随机数时,请删除时间戳超过15分钟的"客户端标识符"和"访问令牌"组合的任何记录.
好吧,经过充分的思考,我相信我已经破解了这个.
他们希望我始终知道上次成功请求的时间戳,这样如果在此之前有任何时间戳,它将被忽略.
Nonce必须是唯一的,但我只是将它们存储到某个日期范围,因此如果时间戳是这么多小时,Nonce将被删除然后可以再次使用,但是因为上次使用的时间戳是即使Nonce被认为是唯一的,因此它们也无法重新使用旧请求,因为该请求的时间戳将过时.
然而,这仅仅因为签名而起作用.如果他们在请求中更改了时间戳或Nonce,则签名将不再与请求匹配,并且将被拒绝(因为时间戳和Nonce都是签名创建的一部分,并且他们没有签名密钥).
唷!
| 归档时间: |
|
| 查看次数: |
21515 次 |
| 最近记录: |