Java check()的Google ID令牌检查器返回null
我跟随了验证来自Android应用程序的后端调用()的博文,以验证Android客户端在Java中发送的令牌 我将博客文章中的示例代码用于Google Client Library for Java() 但是,示例代码中的Java check()的Google ID令牌检查器返回null,java,android,google-oauth,google-openid,Java,Android,Google Oauth,Google Openid,我跟随了验证来自Android应用程序的后端调用()的博文,以验证Android客户端在Java中发送的令牌 我将博客文章中的示例代码用于Google Client Library for Java() 但是,示例代码中的GoogleIdToken.Payload检查(String-tokenString)方法有时返回null。这很烦人,因为我想使用payload.getAudience()和payload.getAuthorizedParty()来防止欺骗。如果有效负载为null,则会发生Nu
GoogleIdToken.Payload检查(String-tokenString)
方法有时返回null。这很烦人,因为我想使用payload.getAudience()和payload.getAuthorizedParty()来防止欺骗。如果有效负载为null,则会发生NullPointerException
我们如何解决这个问题?我假设您有一个try/catch,并且检查了verify()调用没有出现异常 假设返回null意味着它无法验证。出现这种情况的原因包括:
- 你离线了;代码无法获取Google证书以检查签名
- 令牌已过期;他们的寿命通常只有一小时
- 不知何故,令牌已更改,因此签名不再有效
如果您有一个确实确定应该有效的令牌,但verify()调用仍然返回null,那么就提交一个bug。在我的例子中,null是由库内部的错误引起的。 描述:发行人是“accounts.google.com”,但作为回应,我有“”。 解决方案:我手动更改了发行人,这很有帮助 附言。
这个问题已经解决了,但它仍然没有包括在发布版本中,至少在我回答的时候 很抱歉,我不理解尝试/捕获假设。我使用以下代码在示例代码中使用Checker类:Checker Checker=newchecker(newstring[]{clientID},accession);有效载荷=检查器检查(令牌);System.out.println(payload.getAudience())//NPE我应该用try/catch来包围这些代码吗?您可能想试试这个。点击>并查看您的令牌是否有效。如果是,但check()仍然返回null,这肯定是一个错误。在尝试之后,我发现我向Checker传递了一个错误的客户端ID。令牌有效,但check()返回null,因为我传递了错误的clientID。它是按预期工作还是一个bug?如果它按预期工作,我希望它能给出更具体的信息。url是在表单中还是在表单中?在的文档中,它表示前一种形式。这取决于您是要查看访问令牌还是ID令牌。您正在使用的API的文档应该清楚地表明您在任何时候都在处理哪些API。