Got OAuthException "Credential could not be refreshed" with a correct Refresh Token

1,572 views
Skip to first unread message

Qiyuan Liu

unread,
Jul 7, 2017, 3:42:27 PM7/7/17
to AdWords API Forum
First of all, the code I am using to generate crenditials are as following: 
Credential createOAuth2Credential(String refreshToken) throws ValidationException, OAuthException {
   
Credential oAuth2Credential =
       
new OfflineCredentials.Builder()
           
.forApi(OfflineCredentials.Api.ADWORDS)
           
.withRefreshToken(refreshToken)
           
.withClientSecrets(getClientId(), getClientSecret())
           
.build()
           
.generateCredential();
   
return oAuth2Credential;
}

My refresh token was correct for the first time yesterday (since the access token has not been expired). But today this method ```createOAuth2Credential``` throws exception as below. The issue is kind of flaky since not all of our customer accounts have been affected. Can anyone here take a look and let us know why?

Please let us know if you need any other information such as domain IDs.

com.google.api.ads.common.lib.exception.OAuthException: Credential could not be refreshed.
       
at com.google.api.ads.common.lib.auth.OfflineCredentials.generateCredential(OfflineCredentials.java:178)
       
at com.xcompany.mb.adwords.AdWordsClientService.createOAuth2Credential(AdWordsClientService.java:438)
       
at com.xcompany.mb.adwords.AdWordsClientService.refreshTokenExpired(AdWordsClientService.java:1951)
       
at com.xcompany.mb.adwords.AdWordsClientService.logAdExtensions(AdWordsClientService.java:1932)
       
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
       
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
       
at java.lang.reflect.Method.invoke(Method.java:497)
       
at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
       
at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:185)
       
at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
       
at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302)
       
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
       
at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
       
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
       
at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
       
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1480)
       
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1411)
       
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1360)
       
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1350)
       
at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
       
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:538)
       
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:716)
       
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
       
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:808)
       
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1669)
       
at com.xcompany.gemini.webapp.ctl.web.WebControllerFilter.doFilter(WebControllerFilter.java:48)
       
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
       
at com.xcompany.mb.common.txn.TxnTimeoutGrabberServletFilter.doFilter(TxnTimeoutGrabberServletFilter.java:33)
       
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
       
at com.thetransactioncompany.cors.CORSFilter.doFilter(CORSFilter.java:169)
       
at com.thetransactioncompany.cors.CORSFilter.doFilter(CORSFilter.java:232)
       
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
       
at com.xcompany.mb.logfilter.ServletFilter.doFilter(ServletFilter.java:46)
       
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
       
at org.apache.logging.log4j.web.Log4jServletFilter.doFilter(Log4jServletFilter.java:71)
       
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
       
at yjava.servlet.filter.YHdrsFilter.doFilter(YHdrsFilter.java:73)
       
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
       
at yjava.cookie.CookieDataFilter.doFilter(CookieDataFilter.java:133)
       
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
       
at yjava.servlet.filter.DoNotTrackFilter.doFilter(DoNotTrackFilter.java:114)
       
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
       
at yjava.remote.ip.RemoteIPFilter.doFilter(RemoteIPFilter.java:98)
       
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
       
at yjava.security.yiv.servlet.InputValidationFilter.doFilter(InputValidationFilter.java:231)
       
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
       
at org.eclipse.jetty.servlets.UserAgentFilter.doFilter(UserAgentFilter.java:83)
       
at org.eclipse.jetty.servlets.GzipFilter.doFilter(GzipFilter.java:364)
       
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
       
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585)
       
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
       
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:577)
       
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:223)
       
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
       
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
       
at com.xcompany.cb.common.monitoring.jetty.ContainerMonAttachHandler.handle(ContainerMonAttachHandler.java:72)
       
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1129)
       
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)
       
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
       
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)
       
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
       
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:215)
       
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:110)
       
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
       
at org.eclipse.jetty.server.handler.StatisticsHandler.handle(StatisticsHandler.java:159)
       
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
       
at org.eclipse.jetty.server.Server.handle(Server.java:499)
       
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310)
       
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)
       
at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540)
       
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
       
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
       
at java.lang.Thread.run(Thread.java:745)
Caused by: com.google.api.client.auth.oauth2.TokenResponseException: 400 Bad Request
{
 
"
error" : "invalid_grant",
 
"
error_description" : "Token has been expired or revoked."
}
       
at com.google.api.client.auth.oauth2.TokenResponseException.from(TokenResponseException.java:105)
       
at com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:287)
       
at com.google.api.client.auth.oauth2.TokenRequest.execute(TokenRequest.java:307)
       
at com.google.api.client.auth.oauth2.Credential.executeRefreshToken(Credential.java:570)
       
at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.executeRefreshToken(GoogleCredential.java:362)
       
at com.google.api.client.auth.oauth2.Credential.refreshToken(Credential.java:489)
       
at com.google.api.ads.common.lib.auth.OAuth2Helper.callRefreshToken(OAuth2Helper.java:69)
       
at com.google.api.ads.common.lib.auth.OfflineCredentials.generateCredential(OfflineCredentials.java:172)
       
... 73 more


Peter Oliquino

unread,
Jul 10, 2017, 12:52:33 AM7/10/17
to AdWords API Forum
Hi Qiyuan,

Could you try and regenerate a refreshToken by following this guide? Additionally, could you also confirm if you are using the Java client library? If yes, could you try and use the example from that client library for generating the credentials instead? I suggested this because I noticed you maybe using a different approach for generating the credentials. Let me know if this works.

Best regards,
Peter
AdWords API Team
Reply all
Reply to author
Forward
0 new messages