Google Analytics:从刷新令牌中获取访问令牌

Posted

技术标签:

【中文标题】Google Analytics:从刷新令牌中获取访问令牌【英文标题】:Google Analytics : Get access token from refresh token 【发布时间】:2015-01-08 10:14:12 【问题描述】:

我正在使用 Java 中的谷歌分析 api。我有一个从刷新令牌中获取访问令牌的代码。我们将刷新令牌存储在数据库中,并在请求时检索访问令牌。

更改密码后,我们的请求令牌无效。因此,我通过浏览 url (https://developers.google.com/oauthplayground) 并按照说明生成了一个新的刷新令牌。我得到了新的刷新令牌。现在,当我执行代码以检索访问令牌时,它会引发空指针异常。以下是代码:

RefreshTokenRequest request = new GoogleRefreshTokenRequest(HTTP_TRANSPORT, JSON_FACTORY, refreshToken,
                    this.clientId, this.clientSecret);
            TokenResponse response = request.execute(); 

execute方法被调用时,抛出如下异常:

java.lang.NullPointerException
    at com.google.api.client.repackaged.com.google.common.base.Preconditions.checkNotNull(Preconditions.java:191)
    at com.google.api.client.util.Preconditions.checkNotNull(Preconditions.java:127)
    at com.google.api.client.json.jackson2.JacksonFactory.createJsonParser(JacksonFactory.java:96)
    at com.google.api.client.json.JsonObjectParser.parseAndClose(JsonObjectParser.java:85)
    at com.google.api.client.json.JsonObjectParser.parseAndClose(JsonObjectParser.java:81)
    at com.google.api.client.auth.oauth2.TokenResponseException.from(TokenResponseException.java:88)
    at com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:287)
    at com.google.api.client.googleapis.auth.oauth2.GoogleRefreshTokenRequest.execute(GoogleRefreshTokenRequest.java:125)
    at com.google.api.client.googleapis.auth.oauth2.GoogleRefreshTokenRequest.execute(GoogleRefreshTokenRequest.java:75)
    at GARTest.main(GARTest.java:22)

谁能指出我哪里做错了?我可以从 google oAuth UI 获取访问令牌。

【问题讨论】:

恐怕这是 GoogleApi java 库的未解决问题:github.com/google/google-api-java-client/issues/932 请分享,如果您有任何解决方案。 您不应该使用 Oauthplayground 来获取 RefreshToken,这应该是您代码的一部分。此外,密码更改不会影响 OAuth2 RefreshToken,这是 OAuth 的重点。 【参考方案1】:

这可能有你的答案:https://github.com/googleads/googleads-java-lib/issues/19

Github 用户 jyothi462 说他的 NPE 最终是由于使用了错误的客户端 ID 和密码。这也是我的问题。

该问题已通过更新错误消息得到解决,使其更具描述性。

【讨论】:

您引用的堆栈跟踪与描述中的堆栈跟踪非常不同。比较接近的是:github.com/google/google-api-java-client/issues/932

以上是关于Google Analytics:从刷新令牌中获取访问令牌的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Google Calendar API 获取刷新的令牌

如何从 Google YouTube Data API OAuth 2 iOS 获取刷新令牌

无法获取 Google Analytics API 的 oAuth2 访问令牌

新帐户上的 Google API(分析)访问令牌和刷新令牌错误

如何在android中获取google plus的刷新令牌?

如何从 android oAuth 的刷新令牌中获取 access_token