我正在尝试使用Python从REST API中获取信息,并且需要OAuth标识。我设法用Postman撰写了请求,它可以工作。但是Postman给我的python代码不起作用:
import requests
url = "https://www.somewebsite.com/api/rest/products/store/2"
querystring = {"limit":"100","page":"5"}
headers = {
'Authorization': "OAuth oauth_consumer_key="3626311748bcf2072da2bd475fccfa3c",\
oauth_token="878c7c0eb6122e6208b75e2ba9e23f86",\
oauth_signature_method="HMAC-SHA1",oauth_timestamp="1560892926",\
oauth_nonce="9Cy9wmOo21v",oauth_signature="9VqTR2qFQLZ%2Fz2Ibvny1e%2BC7Zes%3D"",
'User-Agent': "PostmanRuntime/7.15.0",
'Accept': "*/*",
'Cache-Control': "no-cache",
'Postman-Token': "eef345cc-52ee-4496-8109-e7ea013adb9c,0834423c-041c-4ca5-8bef-33876c311ef6",
'Host': "www.inart.com",
'cookie': "PHPSESSID=gmjmllng429gfk8t0hvd1abbu3",
'accept-encoding': "gzip, deflate",
'Connection': "keep-alive",
'cache-control': "no-cache"
}
response = requests.request("GET", url, headers=headers, params=querystring)
print(response.text)
无效部分实际上是随机数,时间戳和签名。我已经制作了一个生成随机随机数和随机时间戳的函数,但是我不知道如何为HMAC-SHA1生成有效的签名。 是否有一个库可以为我进行身份验证,或者我需要编写自己的函数来生成有效签名?签名是依赖于整个调用还是仅依赖于现时,时间戳和令牌之类的部分? 任何帮助将不胜感激!
答案 0 :(得分:0)
您可以使用这种方法来同时使用 oauth2 Libary 和 Request,我更喜欢将 ouath2 与 Authorization: Bearer Token 一起使用。 但是,OAuth 1.0 需要加密实现和加密互操作性。虽然安全,但实施起来对许多开发者来说是一个挑战。
其中 OAuth 2.0 定义了四个角色(客户端、授权服务器、资源服务器和资源所有者),OAuth 1 为这些角色使用了一组不同的术语。 OAuth 2.0“客户端”被称为“消费者”,“资源所有者”被简称为“用户”,“资源服务器”被称为“服务提供者”。 OAuth 1 也没有明确区分资源服务器和授权服务器的角色。
params = {
"oauth_version": "1.0",
"oauth_nonce": oauth2.generate_nonce(),
"oauth_timestamp": str(oauth2.generate_timestamp()),
"oauth_token": token.key,
"oauth_consumer_key": consumer.key
}
req = oauth2.Request(method="GET", url=url, parameters=params)
signature_method = oauth2.SignatureMethod_HMAC_SHA1()
req.sign_request(signature_method, consumer, token)
headers = req.to_header()
payload = {}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)