Google Identity Toolkit(v3)是否与GAE / python沙箱兼容?

时间:2015-06-26 21:21:50

标签: python google-app-engine google-identity-toolkit

我正在为一个网站开发一个python GAE应用程序,我正在尝试联合登录。

根据Identity Platform choosing guide,网站的最佳解决方案似乎是Google Identity Toolkit (web)。浏览了我可以找到的所有相关文档然后转到教程,我遇到了一个问题 - 安装identity-toolkit-python-client包失败了C <编译错误与 cffi 库相似,类似于这一个:

# python -m pip install identity-toolkit-python-client
...
gcc -pthread -fno-strict-aliasing -fmessage-length=0 -grecord-gcc-switches -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -g -DNDEBUG -fmessage-length=0 -grecord-gcc-switches -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -g -DOPENSSL_LOAD_CONF -fPIC -I/usr/include/python2.7 -c src/cryptography/hazmat/bindings/__pycache__/_Cryptography_cffi_a269d620xd5c405b7.c -o build/temp.linux-x86_64-2.7/src/cryptography/hazmat/bindings/__pycache__/_Cryptography_cffi_a269d620xd5c405b7.o

src/cryptography/hazmat/bindings/__pycache__/_Cryptography_cffi_a269d620xd5c405b7.c:2:20: fatal error: Python.h: No such file or directory

 #include <Python.h>

                    ^

compilation terminated.

error: command 'gcc' failed with exit status 1

我在为我的linux发行版安装了一些特定的软件包后,最终设法正确安装了软件包,但是这些失败导致了我的实际问题(这些教程非常通用,我无法发现任何有关GAE限制的提示)。

来自GAE python sandbox documentation纯python 代码应该出现在GAE应用中:

  

Python运行时环境的所有代码都必须是纯Python,并且   不包括任何C扩展或其他必须编译的代码。

我没有看到GAE SDK或其第三方库中包含的身份工具包,据我所知,这意味着我必须在自己的应用程序中install it as a 3rd party library。但纯python 代码限制也适用于这些库:

  

您可以将任何第三方库添加到您的应用程序中,只要它   在“纯Python”(没有C扩展)和其他方面实现   App Engine运行时环境中的函数。

因此标题中的问题。

我错过了什么吗?

感谢。

到目前为止,我正在使用webapp2和jinja2。

3 个答案:

答案 0 :(得分:2)

不支持100%,支持第三方库,如PyCrypto,numpy lxml都有&#39; C&#39;基于扩展,但这些都是谷歌直接支持。你无法添加自己不在列表中的内容。

请参阅第三方库文档https://cloud.google.com/appengine/docs/python/tools/libraries27

你必须区分&#34;第三方图书馆&#34; Google支持您自己提供的第三方库。

此外,您还没有说过您正在使用的框架。你可能会发现值得看一下authomatic http://peterhudec.github.io/authomatic/

开箱即用支持:

  • OAuth 1.0a提供商:Bitbucket,Flickr,Meetup,Plurk,Twitter, Tumblr,UbuntuOne,Vimeo,Xero,Xing和Yahoo。 OAuth 2.0提供商: 亚马逊,Behance,Bitly,Cosm,DeviantART,Eventbrite,脸书, Foursquare,GitHub,Google,LinkedIn,PayPal,Reddit,Viadeo,VK, WindowsLive,Yammer和Yandex。 python-openid和Google App Engine 基于OpenID。

答案 1 :(得分:2)

经过多次挖掘,我终于开始了。

Tim Hofman和dsalama的答案都得到了应用,但真正有意义的是这个答案:How to import lib folder within Modules让我意识到第三方libs doc对于模块位于不同目录的应用程序来说并不完全正常(典型的应用程序结构https://cloud.google.com/appengine/docs/python/modules/#Python_Configuration

基本上,必须根据需要为每个使用第三方库的模块应用销售方案:

  • lib目录(或libs本身,取决于所使用的销售方案)必须在每个模块目录中可见/可访问
  • 每个模块必须有自己的appengine_config.py文件,其中的销售代码与模块的.yaml文件并排显示,因为模块无法访问位于应用程序根目录中的文件(如果选择的销售计划依赖于此类文件)

答案 2 :(得分:1)

根据Identity Toolkit论坛的this thread,您可以通过包含PyCrypto v2.6或更高版本在App Engine沙箱中使用Identity Toolkit。

为此,请将以下内容添加到app.yaml文件中:

libraries:
- name: pycrypto
  version: 2.6