gpt4 book ai didi

google-cloud-platform - 间歇性(但频繁)Google Identity Toolkit 验证错误 : "Plaintext too large"

转载 作者:行者123 更新时间:2023-12-03 17:41:04 24 4
gpt4 key购买 nike

我有时(但并非总是)从 Google 身份工具包中收到“纯文本太大”的错误。它似乎在应该尝试验证签名(使用 RSA)的部分中。由于它正在验证有效负载的 SHA256 哈希,因此明文大小不应有任何变化。

如果我记录它尝试使用的 token ,并将其提供给调试器 https://jwt.io/ ,连同 Google RSA 证书(来自 https://www.googleapis.com/identitytoolkit/v3/relyingparty/publicKeys ;使用 jwt.io 放在“kid”下方顶部红色框中的 key 标识符),它表示签名有效。

这只发生在一部分时间里,也许是一半多一点。如果我重复验证,它似乎很好。

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

我将 App Engine 用于我的基础架构。 dev_appserver 和已部署的 App Engine 以及使用 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)

堆栈跟踪如下(从上面引用的行开始):
  File "/base/data/home/apps/redacted/redacted.py", line 218, in redacted:
gitkit_user = gitkit_instance.VerifyGitkitToken(gtoken)
File "/base/data/home/apps/redacted/lib/identitytoolkit/gitkitclient.py", line 266, in VerifyGitkitToken
parsed = crypt.verify_signed_jwt_with_certs(jwt, certs, aud)
File "/base/data/home/apps/redacted/lib/oauth2client/crypt.py", line 240, in verify_signed_jwt_with_certs
_verify_signature(message_to_sign, signature, certs.values())
File "/base/data/home/apps/redacted/lib/oauth2client/crypt.py", line 119, in _verify_signature
if verifier.verify(message, signature):
File "/base/data/home/apps/redacted/lib/oauth2client/_pycrypto_crypt.py", line 52, in verify
SHA256.new(message), signature)
File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/pycrypto-2.6/Crypto/Signature/PKCS1_v1_5.py", line 148, in verify
m = self._key.encrypt(S, 0)[0]
File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/pycrypto-2.6/Crypto/PublicKey/RSA.py", line 150, in encrypt
return pubkey.pubkey.encrypt(self, plaintext, K)
File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/pycrypto-2.6/Crypto/PublicKey/pubkey.py", line 75, in encrypt
ciphertext=self._encrypt(plaintext, K)
File "/base/data/home/runtimes/python27/python27_lib/versions/third_party/pycrypto-2.6/Crypto/PublicKey/RSA.py", line 224, in _encrypt
return (self.key._encrypt(c),)
ValueError: Plaintext too large

仅当有效负载的大小超过 RSA key 的大小时,才会出现“纯文本太大”错误。由于它正在针对 2048 位 RSA key 验证 SHA256 哈希,所以应该没问题,所以我想知道有时从 googleapis.com 加载 key 是否有问题。我的下一步是使用 API stats 模块在发生这种情况的请求中查找 urlfetch 调用,并增加 _pycrypto_crypt.py 以记录它试图验证的 RSA key 。但我想我会在 Stack Overflow 上检查一下,看看是否有人已经走上了这条路。

更新:通过一些额外的日志记录,我学到了一些东西。首先,gitkit API(或其使用的库之一)不使用 JWT header 中指定的 key ID,而是迭代尝试 Google Identity Toolkit key 集中的每个 key 。其次,当我在有足够的日志记录时遇到错误时,它一直在测试真正在 key 集中的 key 之一,因此这使我关于加载 key 问题的理论无效。但它确实是在尝试针对 2048 位 key 验证 256 字节字符串,所以它应该完全没问题。

最后,尽管它通常会遍历所有键,但在我遇到此错误时,它会在尝试的第一个键上遇到错误。这让我想知道,在某些情况下,我是否在早期导入了一个损坏的 pycrypto。

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

最佳答案

PyCrypto 是 deprecated and discouraged to be used by the maintainer .
如果您使用的是 GAE 标准,您仍然可以依赖原生 Python 的 SSL。

我以前偶尔会遇到这个错误。正如您所说的那样,这与 PyCrypto 迭代 key 集中所有可能的 key 这一事实有关,因此根据顺序,您可能会点击一个足够大的 key 以耗尽它的预期资源,如 one of the issues referring to it 中所述。 .

我一直在使用 ssl: 2.7.11 一段时间没有问题。如果您想尝试一下并且对 pyCrypto 没有内在依赖,请更新您的 app.yaml到:

 - name: ssl
version: "2.7.11"

关于google-cloud-platform - 间歇性(但频繁)Google Identity Toolkit 验证错误 : "Plaintext too large",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36110406/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com