python - 如何更改 Requests-OAuthlib 中的时间戳和随机数?

标签 python oauth timestamp nonce

我正在尝试从 upwork 的 api 获取一些数据。 我正在使用Requests-OAuthlib对于一个 API 请求,它可以工作,但对于第二个请求,我收到此错误:“重复的时间戳/随机数组合,可能的重播攻击。请求被拒绝。” 因此,我尝试修改 Requests-OAuthlib 并通过将其放入构造函数中来手动更改时间戳和随机数:

        ur = u''+str(SystemRandom().random())
        ur = ur.replace("0.","")
        self.client.nonce = ur
        ts = u'' + str(int(time()))
        self.client.timestamp = ts

紧接在 self.client = client_class( ... 但它仍然不起作用。 我是 python 和 OAuth 的初学者,所以我宁愿使用这个库,而不是手动构建请求 url。

这是该库的源代码 Requests-OAuthlib source code

如果我在通话结束时打印它们,它们的值与我设置的值相同,但设置它们似乎没有效果,upwork仍然说重放攻击。 我也尝试将它们放入标题中,但仍然不起作用

r.headers['oauth_nonce'] = ur
r.headers['oauth_timestamp'] = ts

更新: 我打印了 r.headers,它包含这些:

第一次通话

oauth_nonce="55156586115444478931487605669", oauth_timestamp="1487605669"

第二次通话

oauth_nonce="117844793977954758411487605670", oauth_timestamp="1487605670"

随机数和时间戳彼此不同。那么为什么 upwork 给我:“重复的时间戳/随机数组合,可能的重播攻击。请求被拒绝。” ?

更新2:可能这只是一些疯狂的工作行为,仍在等待他们的答复。我相信,因为如果我更改端点中的某些内容,它就会起作用,因此随机数/时间戳似乎与问题无关。

更新3:我从upwork得到了答复。真诚地,我无法理解答案,但如果您认为这是有道理的,您可以关闭问题。无论如何我找到了解决方法。 https://community.upwork.com/t5/API-Questions-Answers/Wrong-API-error-message/td-p/306489

最佳答案

对于遇到这个问题的人,我花了几个小时的时间来解决这个问题,直到我最终使用 Fiddler 查看请求和响应。

服务器通过 302 重定向进行响应,并且我的 http 库有助于跟踪重定向并发送相同的 header - 其中当然包括重复的随机数和时间戳。

关于python - 如何更改 Requests-OAuthlib 中的时间戳和随机数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42346528/

相关文章:

python 模块来解码 OSX plist 整数日期?

PostgreSQL: future 的时间戳

java - JOOQ如何将时间戳和表示毫秒的整数相加?

python - 预建的 GVim 7.3。 +python 支持的二进制文件

python - HSM 使用 PKCS11 中关键对象的标签

java - 关于 Google Calendar API v3

python - 雅虎 OAuth API 拒绝我的访问 token 时间戳 (Python)

facebook - 如何在 https 下获取 facebook 头像?

Python pandas 字符串处理来自 SQL 数据库的分类数据

python - 如何绘制我的数据框(python 和 pandas)