【问题标题】:API oauth1.0 authentication via httpsAPI oauth1.0 通过 https 认证
【发布时间】:2016-06-02 08:07:37
【问题描述】:

警报 - 这里是业余编码员 :)

我希望对特定的 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 身份验证。

热烈的问候

【问题讨论】:

    标签: python api authentication ssl oauth


    【解决方案1】:

    错误是SSL 验证失败。

    certifi 已删除 1024 位 CA 证书。 OpenSSL

    尝试将 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 异常。

    【讨论】:

    • 谢谢尼扎姆。我用 certifi.old_where() 重新尝试了它。不幸的是,错误仍然存​​在。也许我应该遵循“证书”的替代方案?您可以建议的任何其他解决方案都会很棒
    猜你喜欢
    • 2017-12-17
    • 2021-03-30
    • 2021-05-25
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 2016-07-07
    • 2023-04-10
    • 2016-11-03
    相关资源
    最近更新 更多