python - python中带有用户名和密码的oauth1.0
问题描述
我正在尝试将 qwikcilver API 集成到我的项目中。他们使用 oauth1.0 进行身份验证。我正在为 oauth1.0 使用requests-oauthlib python lib。
这是我的身份验证代码。
# Using OAuth1Session
oauth = OAuth1Session(client_key, client_secret=client_secret)
fetch_response = oauth.fetch_request_token(request_token_url)
{
"oauth_token": "Z6eEdO8MOmk394WozF5oKyuAv855l4Mlqo7hhlSLik",
"oauth_token_secret": "Kd75W4OQfb2oJTV0vzGzeXftVAwgMnEK9MumzYcM"
}
resource_owner_key = fetch_response.get('oauth_token')
resource_owner_secret = fetch_response.get('oauth_token_secret')
我的查询如下,
qwikcilver 有用户名和密码。我尝试了很多在代码中发送用户名和密码但没有工作。
如何在 requests-oauthlib 请求函数中传递用户名和密码?
解决方案
如果他们有生成令牌和授权的规定,请与 qwikcilver(无论是什么)核实。如果是这样,您可以将令牌用作标头的一部分并调用 API。如果那不存在,请检查他们是否允许 2 条腿呼叫。然而,此类服务通常不允许普通用户进行 2 条腿呼叫。
对于三足通话,您可能需要浏览器来完成授权。
在您的代码中,您调用了请求令牌,并且您正尝试使用它来访问服务。哪个行不通。请求令牌只是一个必须授权的临时令牌。请求令牌不能用于此类 API 调用。不起作用。授权后,您将需要调用访问令牌 API 来获取您的实际令牌 - 可用于访问您被授权的服务。
简而言之,就是这个过程
1) 请求令牌 >> 2) 授权 >> 3) 访问令牌
这就是流量。Python 中的示例
oauth1Session = OAuth1Session(clientKey, clientSecret)
def requestToken(self):
requestTokenResponse = oauth1Session.fetch_request_token(oauth1RequestTokenUrl, realm)
token = requestTokenResponse.get('oauth_token')
secret = requestTokenResponse.get('oauth_token_secret')
return (token, secret)
def authorize(self, token):
authUrl = oauth1Session.authorization_url(oauth1AuthorizeUrl, token)
print (authUrl)
#########
# THIS IS WHERE YOU NEED THE BROWSER.
# You visit authUrl and login with your Username and Password.
# This will complete Authorization
return authUrl
def accessToken(self):
accessTokenResponse = oauth1Session.fetch_access_token(oauth1AccessTokenUrl)
print (accessTokenResponse)
#########
#accessTokenResponse contains your actual token
#
对于浏览器部分 - 您可以尝试 Python 的 Chromium 绑定(之前尝试过的人很少 - 例如这个https://github.com/cztomczak/cefpython)。还有其他选项,例如使用默认安装的浏览器等。选择适合你的任何东西。
一旦你有了它——你可以通过编程方式访问 URL (authUrl) 并且一旦获得授权(登录,然后是“允许”)——你可能会被重定向到带有“代码”查询的回调(在 OAuth1 的情况下你指定)细绳。这是授权码。
获得授权码后,您可以关闭浏览器窗口并调用 Get Access Token 调用 (fetch_access_token)。
希望这可以帮助 !
推荐阅读
- amazon-web-services - YAML 中 AWS Cloudformation 模板中的 `Ref:logicalName` 和 `!Ref logicalName` 有什么区别?
- c# - 如何用 C# 重新构造嵌套的 json 数据?或团结
- wordpress - 在 woocommerce 网站登录并注册
- vmware-clarity - 如何在页面上居中内嵌单选按钮?
- python - QTextEdit 的 QTextDocument 在 SetText 后无法调整页面大小
- php - 如何使用 php 激活 python 脚本并且在 time.sleep 进行时不加载页面
- android - Realm 数据库是否可移植
- r - 当 R 中已知矩阵的列数时,如何将多列添加到矩阵中?
- kotlin - 是否有计划为 Spring Tools Suite 添加 Kotlin 支持?
- python - 在 Django 管理员的更改页面中显示带有表格的模型字段