如何在Requests-OAuthlib中更改时间戳和nonce?

时间:2017-02-20 13:58:07

标签: python oauth timestamp nonce

我正试图从upwork的api中获取一些数据。 我正在使用Requests-OAuthlib。对于一个API请求它可以工作但是对于第二个我得到这个错误:" 重复时间戳/ nonce组合,可能的重放攻击。请求被拒绝。"  所以我尝试修改Requests-OAuthlib并通过将其置于内部构造函数中手动更改时间戳和nonce:

        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

的源代码

如果我在调用结束时打印它们,它们的值与我设置的值相同,但设置它们似乎没有效果,正常工作仍然表示重放攻击。 我也尝试将它们放在标题中,仍然无法正常工作

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

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

第一次通话

oauth_nonce="55156586115444478931487605669", oauth_timestamp="1487605669"

进行第二次通话

oauth_nonce="117844793977954758411487605670", oauth_timestamp="1487605670"

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

更新2:可能只是一些疯狂的上班行为,仍在等待他们的回答。我相信,因为如果我在端点中更改某些内容它会起作用,那么nonces / timestamps似乎与问题无关。

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

1 个答案:

答案 0 :(得分:0)

对于遇到此问题的任何人,我都将头撞了几个小时,直到我最终使用Fiddler来查看请求和响应。

服务器使用302重定向进行响应,我的http库在重定向后发送了相同的标头(当然包括重复的随机数和时间戳)。