用于Java check()的Google ID-Token检查器返回null

时间:2013-09-20 13:47:15

标签: java android google-oauth google-openid

我按照博客文章验证Android应用程序的后端调用(http://android-developers.blogspot.tw/2013/01/verifying-back-end-calls-from-android.html)来验证Android客户端用Java发送的令牌。

我使用Google Client Library for Java(http://code.google.com/p/google-api-java-client/downloads/detail?name=google-api-java-client-1.17.0-rc.zip&can=2&q=)的博客文章中的示例代码。

但是,示例代码中的GoogleIdToken.Payload check(String tokenString)方法有时会返回null。这非常烦人,因为我想使用payload.getAudience()和payload.getAuthorizedParty()来防止欺骗。如果Payload为null,则发生NullPointerException。

我们如何解决问题?

2 个答案:

答案 0 :(得分:1)

我假设你有一个try / catch并检查过你没有从verify()调用中获得异常?

假设返回null意味着无法验证。可能发生的原因包括:

  • 你离线了;代码无法获取Google证书以检查签名
  • 令牌已过期;他们的一生只有一个小时
  • 以某种方式更改了令牌,因此签名不再有效

如果你有一个你真的应该有效的令牌,但是verify()调用仍然会返回null,然后提交一个bug。

答案 1 :(得分:0)

在我的情况下,null是由库中的issue引起的。 说明:发行人是'accounts.google.com',但作为回应,我有“https://accounts.google.com”。 解决方案:我手动更改了发行者,这有所帮助。

P.S。 这个问题已经修复,但它仍未包含在发布版本中,至少在我回答的那一刻。