2014-12-04 76 views
15

我试图创建一个服务帐户应用程序,以便我可以使用Python访问Google Analytics API。 有两件事让我感到困惑。首先,当我使用下面的代码:
使用服务帐户的Google API访问oauth2client.client.CryptoUnavailableError:没有可用的加密库

`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时,找不到安全图标或更多选项按钮。任何帮助非常感谢你。

回答

12

该错误可能意味着您需要python-openssl软件包。

apt-get install python-openssl 
4

我最近刚刚进行此项设置,但选择去与PyCrypto 2.6.1,但你也可以使用如前面的答复中提到蟒蛇,OpenSSL的。

我唯一遇到的问题是我无法查明这一点,但Google Developer Console生成的P12密钥与我的服务帐户API调用(针对购物的Content API)无效,而且我有将钥匙切换到PEM格式以使事情顺利进行。

我的设置:(Win7的,蟒蛇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并为创建服务帐户期间创建的客户端电子邮件地址授予适当的权限。

+0

当'p12'文件转换成'pem'作为@davidtzau介绍你需要输入Google在'notasecret'的'p12'文件上设置的默认密码。当“pem”内容输出到新的“pem”文件时,它不再受密码保护。尽管如此,oauth2client模块在不使用密码的情况下优雅地接受“pem”内容,但默认情况下会假设“notasecret”的密码短语:https://google-api-python-client.googlecode.com/hg/docs/epy /oauth2client.client.SignedJwtAssertionCredentials-class.html – 2014-12-23 06:43:47

7

即使在您的开发环境中安装了pycrypto & python-ssl库,您需要将此pycrypto库添加到您的应用程序的app.yaml文件中。

libraries: 
- name: pycrypto 
    version: "latest" 
+2

谢谢!这是我失踪的作品。这就是为什么你应该总是阅读的不仅仅是接受的答案:) – 2015-07-17 18:03:50

+0

pycrypto现在是一个默认的运行时提供的库,我们可以通过更新app.yaml来包含/使用它。这也意味着我们不需要包含任何我们自己的第三方库。只是认为这些信息可能对那些在他们的项目中包含lib的人有用。 – radhashankark 2015-09-29 16:15:24

31

这为我做的伎俩(无须转换为PEM):

pip install PyOpenSSL 

pip freeze说我有版本0.15.1

0

OSX 10.11埃尔卡皮坦不分发OpenSSL的了。我可以使用自制软件和静态编译安装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 

更多信息

相关问题