这是一个与python应用程序和Google的BigQuery之间的服务器到服务器授权有关的问题,但可能与其他云服务相关。
App本地开发服务器能够使用远程服务进行身份验证吗?更好的是有一个本地的BigQuery?
我知道AppAssertionCredentials目前无法在本地开发服务器上工作,尽管这本身是非常令人沮丧的。
替代方法适用于标准python代码,在本地开发服务器沙箱之外,详细的这里不适用于本地开发服务器,因为即使启用了PyCrypto,沙箱也不允许某些posix模块,例如“pwd”。
我已经让AppAssertionCredentials在远程服务器上工作,而SignedJwtAssertionCredentials方法在本地运行,因此服务帐户的设置是正确的。
导入在试图/除了块中的oauth2client/crypt.py中失败--在注释掉它们之后,沙箱白名单异常是很容易看到的。
我在白名单上添加了“pwd”,然后又出现了另一个问题,所以我急忙跑出了那个兔子洞。
我已经尝试将PyCrypto直接包含到具有类似结果的项目中。
我也尝试过使用OpenSSL来获得类似的结果。
我找了一个本地应用程序专用的PyCrypto,但没有用,我错过了一个吗?我应该说这是在Mac上--也许我应该启动一个linux机器,然后再试一试?
发布于 2014-03-28 21:00:22
最近发布的Google在开发服务器上增加了对AppAssertionCredentials方法的支持。若要在本地使用此方法,请向dev_appserver.py添加以下参数
$ dev_appserver.py --help
...
Application Identity:
--appidentity_email_address APPIDENTITY_EMAIL_ADDRESS
email address associated with a service account that
has a downloadable key. May be None for no local
application identity. (default: None)
--appidentity_private_key_path APPIDENTITY_PRIVATE_KEY_PATH
path to private key file associated with service
account (.pem format). Must be set if
appidentity_email_address is set. (default: None)要使用这些方法:
$ cat /path/to/xxxx-privatekey.p12 | openssl pkcs12 -nodes -nocerts -passin pass:notasecret | openssl rsa > /path/to/secret.pemdev_appserver.py如下:
$ dev_appserver.py --appidentity_email_address xxxx@developer.gserviceaccount.com --appidentity_private_key_path /path/to/secret.pem ...appidentity模块和AppAssertionCredentials的方式与通常在生产中使用的方式相同。请确保/path/to/secret.pem位于应用程序源目录之外,以便它不会意外地作为应用程序的一部分部署。
发布于 2013-12-04 14:25:48
因此,深入搜索PyCrypto和本地应用程序沙箱将我引向这个线程和响应。
https://code.google.com/p/googleappengine/issues/detail?id=1627#c22
这一点在1.7.4中得到了修正。但是,您必须使用easy_install -Z (总是解压缩)来安装PyCrypto。OSX10.8中的默认zipfile选项与dev_appserver中的沙箱仿真不兼容。
解决方案是非常直接的..。
我用:
sudo easy_install pycrypto它应该是:
sudo easy_install -Z pycrypto按照上面的线。使用PIP也可以:
pip install pycrypto 或者手动下载和安装pycrypto也是可行的。我测试了这三个。
如果您已经安装了带有easy_install并且没有-Z标志的pycrypto,那么您可能想要安装pip,这样您就可以轻松地卸载pycrypto.
easy_install pip作为记录,我构建并安装了libgmp,如pil和手动安装所示.
警告:未找到GMP或MPIR库;未建立Crypto.PublicKey._fastmath。
虽然这给了我快速的数学,但没有必要解决这个问题,因为Crypto优雅地没有慢下来数学。
另一个让我有点绊倒的地方是,我从app.yaml中删除了pycrypto,同时测试了OpenSSL是否能给我所需的一切。
所以别忘了加上..。
- name: pycrypto
version: latest转到app.yaml中的libraries:部分。
由于缺少此功能,本机_counter库没有导入,因此计数器失败等。
此外,任何关于必须将Crypto移动到应用程序文件夹本身或从默认的Mac位置/Library/Python/2.7/site-packages/Crypto只在开发服务器的早期版本中有效的讨论。
类似地,现在不需要编辑任何_WHITE_LIST_C_MODULES列表(在AppEngine1.8中的sandbox.py中也包含允许Crypto.Util._counter等的正则表达式)
在您发现关键问题之前,您可能会遇到的另一个难题是,您从控制台下载的密钥文件是PKCS12,并以十六进制文本的形式下载,因此我将其转换为二进制文件,然后将其转换为PEM,以便将其包含在源代码中。
发布于 2013-12-07 03:35:57
我为这件事挣扎了一两天。我终于能够让本地主机使用服务器到服务器身份验证、服务帐户和.p12证书。
如果这对任何人都有帮助的话,下面是一个简单的要点:https://gist.github.com/dandelauro/7836962
https://stackoverflow.com/questions/20349189
复制相似问题