Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform 间歇(但频繁)的Google Identity Toolkit验证错误:“;“纯文本太大”;_Google Cloud Platform_Google Identity Toolkit_Google Identity - Fatal编程技术网

Google cloud platform 间歇(但频繁)的Google Identity Toolkit验证错误:“;“纯文本太大”;

Google cloud platform 间歇(但频繁)的Google Identity Toolkit验证错误:“;“纯文本太大”;,google-cloud-platform,google-identity-toolkit,google-identity,Google Cloud Platform,Google Identity Toolkit,Google Identity,我有时——但并非总是——从谷歌身份工具包中得到一个错误,说“明文太大”。当它应该尝试验证签名(使用RSA)时,它似乎在一个部分中。因为它正在验证有效负载的SHA256哈希,所以明文大小不应该有任何变化 如果我记录它试图使用的令牌,并将其与Google RSA证书(来自;使用jwt.io放在顶部“kid”下的红色框中的密钥标识符)一起提供给调试器,则表示签名有效 这种情况只会发生一部分时间,可能会超过一半。如果我重复验证,它看起来很好 这似乎只发生在新的身份验证上;如果它已经通过身份验证,那么一切

我有时——但并非总是——从谷歌身份工具包中得到一个错误,说“明文太大”。当它应该尝试验证签名(使用RSA)时,它似乎在一个部分中。因为它正在验证有效负载的SHA256哈希,所以明文大小不应该有任何变化

如果我记录它试图使用的令牌,并将其与Google RSA证书(来自;使用jwt.io放在顶部“kid”下的红色框中的密钥标识符)一起提供给调试器,则表示签名有效

这种情况只会发生一部分时间,可能会超过一半。如果我重复验证,它看起来很好

这似乎只发生在新的身份验证上;如果它已经通过身份验证,那么一切正常,即使我目前没有使用会话cookie:我的代码在每个请求上验证gtoken身份验证。一旦我登录,一切都很好,直到我注销(再次,通过gitkit)。但是,如果我以后再次登录,我很可能会遇到这个错误

我正在为我的基础设施使用应用程序引擎。这在dev_appserver和部署的appengine上都会发生,在使用JavaScript gitkit库的桌面浏览器和使用Objective C gitkit库的iOS应用程序上都会发生。(我没有针对dev_appserver使用iOS进行测试,只是在部署中。)

我使用的代码如下所示:

    gtoken = cookie["gtoken"].value
    logging.debug("Verifying Google Identity Toolkit token: %s",
                  gtoken)
    gitkit_user = gitkit_instance.VerifyGitkitToken(gtoken)
堆栈跟踪如下(从上面引用的行开始):

只有当有效负载的大小超过RSA密钥的大小时,才会出现“明文太大”错误。因为它是根据2048位RSA密钥验证SHA256散列,所以应该没问题,所以我想知道有时从googleapis.com加载密钥是否有问题。我的下一步是使用API统计模块在发生这种情况的请求中查找urlfetch调用,并增加_pycrypto_crypt.py以记录它试图验证的RSA密钥。但我想我应该在Stack Overflow检查一下,看看是否有人已经走上了这条路

更新:通过一些额外的日志记录,我学到了一些东西。首先,GitKitAPI(或它使用的库之一)不使用JWT头中指定的密钥ID,而是迭代尝试Google Identity Toolkit密钥集中的每个密钥。第二,当我在记录足够多的日志时出现错误时,它一直在测试密钥集中的一个密钥,这使我关于加载密钥问题的理论失效。但它实际上是在用2048位的密钥验证256字节的字符串,所以应该是完全正确的

最后,虽然它通常会迭代所有的键,但当我遇到这个错误时,它会在尝试的第一个键上命中错误。这让我怀疑,在某些情况下,我是否很早就导入了一个损坏的pycrypto

正如您从回溯中看到的,我使用的是谷歌提供的pycrypto,尽管在我的应用程序的“lib”目录(位于sys.path中)中有一个本地编译的pycrypto,当我在谷歌身份工具包中出售时保存在那里。

pycrypto是。
如果您使用的是GAE标准,那么仍然可以依赖本机Python的SSL。

我过去偶尔会遇到这种错误。正如您所说的,这与PyCrypto对密钥集中所有可能的密钥进行迭代这一事实有关,因此根据顺序,您可能会命中一个足够大的密钥,从而耗尽它的预期资源,如中所述

我使用ssl:2.7.11已经有一段时间了,没有任何问题。如果您想试用,并且对pyCrypto没有内在依赖性,请将您的
app.yaml
更新为:

 - name: ssl
   version: "2.7.11"

我也有完全相同的问题(相同的错误消息)。。有关于您所在位置的更新吗?遇到相同的问题。你找到解决办法了吗?@SonyKadavan,恐怕没有。我向PyCryptoVerifier.verify添加了一些代码,并在其中放置了一个try:catch块。现在,它将在ValueError上返回False,而不是传播错误。这似乎是一个可行的解决办法,但我不满意。
 - name: ssl
   version: "2.7.11"