带有使用者密钥和秘密的简单 python oAuth 1.0 示例

Posted

技术标签:

【中文标题】带有使用者密钥和秘密的简单 python oAuth 1.0 示例【英文标题】:simple python oAuth 1.0 example with consumer key and secret 【发布时间】:2012-06-20 13:40:47 【问题描述】:

我是 python 和 oAuth 世界的新手。 我想使用使用者密钥和秘密连接到我的服务器,我发现的所有示例都是服务器具有 access_token、authorize、request_token_ready 等 api,但我的服务器为我进行了 oAuth 身份验证。 所以我的问题是如何使用 oAuth 将 python 连接到我的服务器(我的服务器使用 oAuth 1.0)

阐述: 我的服务器不请求令牌和访问令牌。他只使用密钥和秘密。 如何在 python 中实现到此服务器的 oAuth 连接

【问题讨论】:

正如我在所有示例中所说,服务器支持 access_token、authorize、request_token_ready 等 API,而我的服务器不支持。我错过了什么吗? 【参考方案1】:

这是一个使用 requests_oauthlib 的工作示例

from requests_oauthlib import OAuth1Session
test = OAuth1Session('consumer_key',
                    client_secret='XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX')
url = 'https://one-legged-ouath.example.com/username/test'
r = test.get(url)
print r.content

我知道这是一个老问题,但接受的答案确实没有解决他的问题,因为正如 OP 所指出的,这些示例都与仅使用密钥和秘密、无令牌有关。

听起来好像您使用的是我所理解的 OAuth 1.0a(单腿),尽管有些人将其称为 OAuth 1.0a 两腿。

我没有对此进行测试,但这里似乎有一个很好的例子:

https://github.com/CarmaSys/CarmaLinkAPI/wiki/Authentication-&-Permissions

这里还有一个很好的例子:

https://***.com/a/12710408/2599534

【讨论】:

@weaming 不确定这是否与问题有关,这与 SO 使用 OAuth 无关。 它展示了如何在服务用户,开发者方面使用OAuth 查看requests-oauthlib docs 了解更多工作流示例(包括 OAuth 2)。【参考方案2】:

如果您正在寻找可以连接到服务器的客户端,我可以推荐rauth。有许多 examples 演示了 OAuth 1.0/a 和 2.0。

【讨论】:

【参考方案3】:

正如 roman 已经说过的,这是一个老问题,但仍有一些受 OAuth 1.0a(单腿)保护的 API,今天我花了几个小时寻找访问此类 API 的有效解决方案.

我希望,该解决方案可能对下一个面临类似任务的人派上用场。

我的解决方案是基于罗马人的回答。非常感谢@roman!

我想要访问的 API 的默认响应是 XML,因此我需要一种设置请求标头的方法。如果你知道怎么做的话,实际上做起来很简单。

from requests_oauthlib import OAuth1Session

CONSUMER_KEY = ""
CONSUMER_SECRET = ""

host = "rest.host.de"
uri = "/restapi/api/search/v1.0/statistic?geocode=1276001039"

oauthRequest = OAuth1Session(CONSUMER_KEY,
                    client_secret=CONSUMER_SECRET)

url = 'https://' + host + uri

headers = 
        'Accept': "application/json",
        'Accept-Encoding': "gzip, deflate",
    

response = oauthRequest.get(url, headers=headers)

print(response.status_code)
print(response.content)

【讨论】:

【参考方案4】:

我正在添加这个带有 POX 帖子正文的 OAuth 1.0a(单腿)示例。这是一个使用带有“Plain Old XML”(POX)主体的请求/发布/响应的简单示例:

from requests_oauthlib import OAuth1Session
   
CONSUMER_KEY = "xxxxxxx"
CONSUMER_SECRET = "xxxxxxx"

ourSession = OAuth1Session(CONSUMER_KEY, client_secret=CONSUMER_SECRET, force_include_body=True)

body= '<?xml version="1.0" encoding="UTF-8"?>' \
   '<POXEnvelopeRequest xmlns="http://whateve">' \
   '<POXHeader>' \
   ' <RequestHeaderInfo>' \
      .   .   .   .
   ' </RequestHeaderInfo>' \
   '</POXHeader>'   \
   '</POXEnvelopeRequest>'

clen = str(len(body))

headers = 
 'Accept': '*/*',
 'Accept-Encoding': 'gzip, deflate, br',
 'Host': 'X.Y.com',
 'Content-Type': 'application/xml',
 'Connection': 'keep-alive',
 'Content-Length': clen


r = ourSession.post(url, headers=headers, data=body, verify=False)

# DEBUG: Comment out in and out as needed... 
print("===================== B E G I N    R E S P O N S E =======================\n")
print(r)
print(r.text)
print("===================== E N D    of  R E S P O N S E =======================\n")

[python][oAuth1.0a][单腿][双腿]

【讨论】:

以上是关于带有使用者密钥和秘密的简单 python oAuth 1.0 示例的主要内容,如果未能解决你的问题,请参考以下文章

使用boto3,从整个文件夹或文件从一个s3存储桶复制到同一区域的另一个文件夹时,如何提供访问密钥和秘密访问密钥?

服务如何生成和使用公共和秘密 API 密钥?

配置错误的Django应用程序可暴露秘密API密钥和数据库密码

在 iOS 中,如何存储允许我与服务器通信的秘密“密钥”?

如何使用 API 密钥和秘密保护 Spring Boot API

如何将访问密钥和秘密密钥 shell 变量传递给 Redshift 复制命令