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

Is Google Identity Toolkit (v3) compatible with GAE/python sandbox?

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

根据Identity Platform choosing guide the best solution for a web site appears to be the Google Identity Toolkit (web)。浏览了我能找到的所有相关文档,然后转到教程,在那里我遇到了一个问题——安装 identity-toolkit-python-client 包失败,出现与 cffi 库相关的 C 编译错误,与此类似:

# 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 应用程序中:

All code for the Python runtime environment must be pure Python, and not include any C extensions or other code that must be compiled.

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

You can add any third-party library to your application, as long as it is implemented in "pure Python" (no C extensions) and otherwise functions in the App Engine runtime environment.

因此标题中的问题。

我是不是漏掉了什么?

谢谢。

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

这不是 100%,支持的第 3 方库如 PyCrypto、numpy lxml 都有基于 'C' 的扩展,但这些都直接由 google 支持。您只是无法添加不在列表中的自己的内容。

查看第 3 方库文档 https://cloud.google.com/appengine/docs/python/tools/libraries27

您必须区分 Google 支持的“第 3 方库”与您自己提供的第 3 方库。

你也没有说你用的是什么框架。您可能会发现值得一看 authomatic http://peterhudec.github.io/authomatic/

开箱即用支持:

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

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

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

libraries:
- name: pycrypto
  version: 2.6

经过大量挖掘,我终于搞定了。

Tim Hofman 和 dsalama 的两个答案都适用,但真正打破规模的是这个答案: which made me realize that the 3rd party libs doc is not quite OK for apps with modules located in a separate directories (typical documented app structure https://cloud.google.com/appengine/docs/python/modules/#Python_Configuration)

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

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