首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从本地App开发服务器访问BigQuery

无法从本地App开发服务器访问BigQuery
EN

Stack Overflow用户
提问于 2013-12-03 10:55:56
回答 5查看 6.4K关注 0票数 25

这是一个与python应用程序和Google的BigQuery之间的服务器到服务器授权有关的问题,但可能与其他云服务相关。

App本地开发服务器能够使用远程服务进行身份验证吗?更好的是有一个本地的BigQuery?

我知道AppAssertionCredentials目前无法在本地开发服务器上工作,尽管这本身是非常令人沮丧的。

替代方法适用于标准python代码,在本地开发服务器沙箱之外,详细的这里不适用于本地开发服务器,因为即使启用了PyCrypto,沙箱也不允许某些posix模块,例如“pwd”。

我已经让AppAssertionCredentials在远程服务器上工作,而SignedJwtAssertionCredentials方法在本地运行,因此服务帐户的设置是正确的。

导入在试图/除了块中的oauth2client/crypt.py中失败--在注释掉它们之后,沙箱白名单异常是很容易看到的。

我在白名单上添加了“pwd”,然后又出现了另一个问题,所以我急忙跑出了那个兔子洞。

我已经尝试将PyCrypto直接包含到具有类似结果的项目中。

我也尝试过使用OpenSSL来获得类似的结果。

我找了一个本地应用程序专用的PyCrypto,但没有用,我错过了一个吗?我应该说这是在Mac上--也许我应该启动一个linux机器,然后再试一试?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-03-28 21:00:22

最近发布的Google在开发服务器上增加了对AppAssertionCredentials方法的支持。若要在本地使用此方法,请向dev_appserver.py添加以下参数

代码语言:javascript
复制
$ 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)

要使用这些方法:

  1. 控制台中,选择一个项目,然后导航到"API & auth“->凭据”->“创建新的客户端ID。
  2. 选择"Service“并按照提示以PKCS12 (.p12)格式下载私钥。请注意服务帐户的电子邮件地址。
  3. 请确保将服务帐户电子邮件地址添加到包含需要访问的数据的任何项目的“权限”选项卡中,默认情况下,该地址将添加到创建该邮件的项目团队中。
  4. 使用以下命令将PKCS12格式转换为PKCS1格式: $ cat /path/to/xxxx-privatekey.p12 | openssl pkcs12 -nodes -nocerts -passin pass:notasecret | openssl rsa > /path/to/secret.pem
  5. 启动dev_appserver.py如下: $ dev_appserver.py --appidentity_email_address xxxx@developer.gserviceaccount.com --appidentity_private_key_path /path/to/secret.pem ...
  6. 在本地使用appidentity模块和AppAssertionCredentials的方式与通常在生产中使用的方式相同。

请确保/path/to/secret.pem位于应用程序源目录之外,以便它不会意外地作为应用程序的一部分部署。

票数 40
EN

Stack Overflow用户

发布于 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中的沙箱仿真不兼容。

解决方案是非常直接的..。

我用:

代码语言:javascript
复制
sudo easy_install pycrypto

它应该是:

代码语言:javascript
复制
sudo easy_install -Z pycrypto

按照上面的线。使用PIP也可以:

代码语言:javascript
复制
pip install pycrypto 

或者手动下载和安装pycrypto也是可行的。我测试了这三个。

如果您已经安装了带有easy_install并且没有-Z标志的pycrypto,那么您可能想要安装pip,这样您就可以轻松地卸载pycrypto.

代码语言:javascript
复制
easy_install pip

作为记录,我构建并安装了libgmp,如pil和手动安装所示.

警告:未找到GMP或MPIR库;未建立Crypto.PublicKey._fastmath。

虽然这给了我快速的数学,但没有必要解决这个问题,因为Crypto优雅地没有慢下来数学。

另一个让我有点绊倒的地方是,我从app.yaml中删除了pycrypto,同时测试了OpenSSL是否能给我所需的一切。

所以别忘了加上..。

代码语言:javascript
复制
- 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,以便将其包含在源代码中。

票数 3
EN

Stack Overflow用户

发布于 2013-12-07 03:35:57

我为这件事挣扎了一两天。我终于能够让本地主机使用服务器到服务器身份验证、服务帐户和.p12证书。

如果这对任何人都有帮助的话,下面是一个简单的要点:https://gist.github.com/dandelauro/7836962

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20349189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档