使用服务帐户 oauth2client.client.CryptoUnavailableError 的 Google API 访问:没有可用的加密库
Posted
技术标签:
【中文标题】使用服务帐户 oauth2client.client.CryptoUnavailableError 的 Google API 访问:没有可用的加密库【英文标题】:Google API access using Service Account oauth2client.client.CryptoUnavailableError: No crypto library available 【发布时间】:2015-02-03 00:45:30 【问题描述】:我正在尝试创建一个服务帐户应用,以便我可以使用 Python 访问 Google Analytics api。 有两件事让我感到困惑。首先,当我使用以下代码时:
`from oauth2client.client import SignedJwtAssertionCredentials
client_email = "#####client_email#######.gserviceaccount.com"
with open("XXXXXX.p12") as f:
private_key = f.read()
credentials = SignedJwtAssertionCredentials(client_email, private_key,'https://www.googleapis.com/auth/sqlservice.admin')`
我收到以下错误:
`oauth2client.client.CryptoUnavailableError: No crypto library available`
在做了一些研究后,我发现这可能与将应用程序域范围的权限授予服务帐户有关。但是,当我登录到 Google Developers Console 时,我找不到安全图标或更多选项按钮。非常感谢您的任何帮助。
【问题讨论】:
【参考方案1】:OSX 10.11 El Capitan 不再分发 OpenSSL。我能够使用 Homebrew 和静态构建安装 cryptography
:
env CRYPTOGRAPHY_OSX_NO_LINK_FLAGS=1 LDFLAGS="$(brew --prefix openssl)/lib/libssl.a $(brew --prefix openssl)/lib/libcrypto.a" CFLAGS="-I$(brew --prefix openssl)/include" pip install cryptography
更多信息
http://cryptography.readthedocs.org/en/latest/installation/【讨论】:
【参考方案2】:这对我有用(没有转换为 PEM):
pip install PyOpenSSL
pip freeze
说我有版本 0.15.1
【讨论】:
【参考方案3】:即使您在开发环境中安装了 pycrypto 和 python-ssl 库,您也需要在应用程序的 app.yaml
文件中添加此 pycrypto
库。
libraries:
- name: pycrypto
version: "latest"
【讨论】:
谢谢!这是我缺少的部分。这就是为什么您应该始终阅读的不仅仅是公认的答案:) pycrypto 现在是默认运行时提供的库,我们可以通过更新 app.yaml 来包含/使用它。这也意味着我们不需要包含任何我们自己的第三方库。只是认为该信息可能对在他们的项目中也包含该库的人有用。【参考方案4】:我刚刚设置了它,但选择使用PyCrypto 2.6.1,但您也可以使用上一个答案中提到的 python-openssl。
我遇到的唯一问题是我无法确定这一点,但 Google 开发者控制台生成的 P12 密钥无法与我的服务帐户 API 调用(对 Content API for Shopping)一起使用,我不得不将密钥切换到 PEM 格式以使事情顺利进行。
我的设置:(Win7,python 2.7.x,PyCrypto 2.6.1)
我在尝试使用 P12 密钥时遇到的错误,但后来在将其转换为 PEM 时解决了:
错误 3:PyCrypto 库不支持 PKCS12 格式。 NotImplementedError:PyCrypto 库不支持 PKCS12 格式。如果可以选择本机代码,请尝试转换为“PEM”(openssl pkcs12 -in xxxxx.p12 -nodes -nocerts > privatekey.pem)或使用 PyOpenSSL。
一件重要的事情是,不要忘记进入 Google Analytics(分析)并为在创建服务帐户期间创建的客户电子邮件地址授予适当的权限。
【讨论】:
在将p12
文件转换为pem
时,如@davidtzau 所述,您需要输入Google 在p12
文件上设置的默认密码,即notasecret
。当pem
内容输出到新的pem
文件时,它不再受密码保护。尽管如此,oauth2client 模块还是可以优雅地接受不带密码的 pem
内容,尽管默认情况下它假定密码为 notasecret
:google-api-python-client.googlecode.com/hg/docs/epy/…【参考方案5】:
该错误可能意味着您需要 python-openssl 包。
apt-get install python-openssl
【讨论】:
以上是关于使用服务帐户 oauth2client.client.CryptoUnavailableError 的 Google API 访问:没有可用的加密库的主要内容,如果未能解决你的问题,请参考以下文章