通过https进行API oauth1.0身份验证

时间:2016-02-20 18:49:29

标签: python api authentication ssl oauth

警报 - 业余编码员:)

我希望获得特定Reporting API的只读访问权限。 这个特殊的API文档提到:

1)所有API请求必须通过 HTTPS 进行。通过普通HTTP进行的调用将失败。

2)通过 Oauth 1.0a(双腿)

完成身份验证

我使用Python 3+来调用API。对于SSL证书,我使用 certifi

以下是我通过oauth

进行身份验证时使用的代码
import oauth2 as oauth
import time,certifi
consumer = oauth.Consumer(key="***KeyHere***", secret="***SecretHere***")
client = oauth.Client(consumer)
client.ca_certs = certifi.where()

request_token_url = "https://reportapi.xxx.xxx.com"
resp, content = client.request(request_token_url, "GET")

token = oauth.Token(request_token['oauth_token'], request_token['oauth_token_secret'])

但它始终给我以下错误:

  

ssl.SSLError:[SSL:CERTIFICATE_VERIFY_FAILED]证书验证失败(_ssl.c:646)

如果有人能给我这方面的指导,会很棒。

如何使用https调用对此API执行oauth身份验证。

温馨的问候

1 个答案:

答案 0 :(得分:0)

错误是SSL验证失败。

certifi已删除1024位CA证书。 OpenSSL< 1.0.2有时无法验证具有2048位密钥的证书。

尝试将client.ca_certs = certifi.where()替换为client.ca_certs = certifi.old_where()以包含旧的1024位密钥证书。

检查https://pypi.python.org/pypi/certifi

如果问题仍然存在,您必须使用ssl模块手动验证服务器证书 这是我验证mail.google.com证书的方式。

import ssl
import certifi
ssl.get_server_certificate(('mail.google.com',443),ca_certs=certifi.old_where())

certifi.where()无效mail.google.com这就是我使用certifi.old_where()的原因。使用要验证的服务器执行此操作。如果失败,将会有SSLError例外。