gpt4 book ai didi

android - 谷歌云端点 : verifyToken: Signature length not correct

转载 作者:IT老高 更新时间:2023-10-28 22:15:16 27 4
gpt4 key购买 nike

今天早上,从我的 Android 应用向我的 Google Cloud Endpoint 发出的每个 API 请求都开始出现以下异常:

com.google.api.server.spi.auth.GoogleIdTokenUtils verifyToken: verifyToken: Signature length not correct: got 256 but was expecting 128

在我的 javascript 网络客户端上调用仍然可以正常工作。我没有更改服务器端代码或客户端代码。

最近该服务是否发生了任何可能导致这种情况发生的变化?

更新:第一次出现这种情况似乎是在 11:17:07 UTC

更新:不起作用的事情包括为 android 生成新的客户端 ID 并更新到 App Engine SDK 1.9.22

最佳答案

原因

  • RSA 具有可变长度的签名,具体取决于 key 大小。
  • Google 更新了用于签名的 key 对,现在其中一个 key 对生成的签名长度与另一个不同
  • java.security.Signature.verify(byte[] signature) 如果传递了错误长度的签名,则抛出异常(而不是返回 false,这通常在签名不匹配时完成 key )

对我来说,解决方案是包装验证调用 (try...catch),然后返回 false。您也可以自己对公钥进行早期检查,检查签名的长度是否与公钥模数的长度匹配。

如果您使用库来检查签名,请确保使用最新版本。

查看 http://android-developers.blogspot.nl/2013/01/verifying-back-end-calls-from-android.html 上的示例代码,你必须改变这个:

GoogleIdToken token = GoogleIdToken.parse(mJFactory, tokenString);

JsonWebSignature jws = JsonWebSignature.parser(mJFactory).setPayloadClass(Payload.class).parse(tokenString);
GoogleIdToken token = new GoogleIdToken(jws.getHeader(), (Payload) jws.getPayload(), jws.getSignatureBytes(), jws.getSignedContentBytes()) {
public boolean verify(GoogleIdTokenVerifier verifier)
throws GeneralSecurityException, IOException {
try {
return verifier.verify(this);
} catch (java.security.SignatureException e) {
return false;
}
}
};

很遗憾,我没有确切的设置来测试这个。

对于那些使用 Google Cloud Endpoint 的人,就像问题所述,我认为除了等到 Google 修复它之外,您几乎无能为力。幸运的是它现在已修复。(从技术上讲,您可能会争辩说像现在所做的那样更改 key 是一种解决方法,并且 Google 提供的库需要修复。但它有效,所以这是一个好的开始)

关于android - 谷歌云端点 : verifyToken: Signature length not correct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30781799/

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