Hi All,
I am trying bind my Android App with App Engine, but I have some problem, when I try decode token in server side using: identity-toolkit-java-client
(https://github.com/google/identity-toolkit-java-client)
can not initialize service account signer: DerInputStream.getLength(): lengthTag=111, too big.
Well, What I need is
get com.google.api.server.spi.auth.common.User in my app engine from
my Android using Gitkit.
What I did:
Android side:
//...
client = GitkitClient.newBuilder(this, new GitkitClient.SignInCallbacks() {
@Override
public void onSignIn(IdToken idToken, GitkitUser user) {
// I am trying decode this in server side (app engine) using: identity-toolkit-java-client
final String token = idToken.getTokenString();
// applive is my appengine clientlibrary
applive.Builder builder = new Applive.Builder(
AndroidHttp.newCompatibleTransport(), new GsonFactory(),
new HttpRequestInitializer(){
public void initialize(HttpRequest
request) {
request.getHeaders().setAuthorization(token);
}
});
service = builder.build();
}
//...
//...
//Call app engine api
new Testme().execute();
private class Testme extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
try {
service.live().test().execute();
service.live().islive().execute();
} catch (IOException e) {
e.printStackTrace();
}
return null;
} }
//...
Appengine Server side:
// Appengine Custom Authenticator class
public class MyCustomAuthenticator implements Authenticator {
private static final Logger log = Logger.getLogger(MyCustomAuthenticator.class.getName());
@Override
public User authenticate(HttpServletRequest request) {
//Gitkit token from android app
String token = request.getHeader("Authorization");
//...
log.warning(token);
try {
GitkitClient gitkitClient = GitkitClient.newBuilder()
.setGoogleClientId("xpto.apps.googleusercontent.com")
.setServiceAccountEmail("xp...@xpto.iam.gserviceaccount.com")
.setKeyStream(new FileInputStream("WEB-INF/rave79-a21cc69d2616.p12"))
.setWidgetUrl("https://rave79-1979.appspot.com/uiwidgets/gitkit-signin-button.html")
.build();
log.warning("after build");
if(gitkitClient.validateTokenToJson(token)==null){
log.warning("j==null");
}
} catch (FileNotFoundException e) {
log.warning(e.getMessage());
}
catch (GitkitClientException e1) {
log.warning(e1.getMessage());
}
catch (IOException e2) {
log.warning(e2.getMessage());
}
}
I always receive
can not initialize service account signer
Any idea!!!?
What iam doing wrong?
Full appengine log
F 2015-12-30 05:27:18.920 500 0 B 24 ms W 05:27:18.938 W 05:27:18.938 W 05:27:18.939 W 05:27:18.940 W 05:27:18.940 W 05:27:18.941 F 05:27:18.943 /_ah/spi/com.rave79.endpoint.LiveEndpoint.get
187.107.182.205 - - [30/Dec/2015:05:27:18 -0800] "POST /_ah/spi/com.rave79.endpoint.LiveEndpoint.get HTTP/1.1" 500 - - "Google-API-Java-Client Google-HTTP-Java-Client/1.21.0 (gzip)" "rave79-1979.appspot.com" ms=24 cpu_ms=22 cpm_usd=0 instance=00c61b117c43d0c1c93d198245f02da18b8e4275 app_engine_release=1.9.30 trace_id=-
W 05:27:18.938 com.rave79.MyCustomAuthenticator token: eyJhbGciOiJSUzI1NiIsImtpZCI6ImJMOTJtZyJ9.eyJpc3MiOiJodHRwczovL2lkZW50aXR5dG9vbGtpdC5nb29nbGUuY29tLyIsImF1ZCI6IjYzODU1OTcwNjY4Mi0zbzIxZGtlb2JtdHQ1OWl1ajNsNDFxbnVuNTMxMWN0cy5hcHBzLmdvb2dsZXVzZXJjb250ZW50LmNvbSIsImlhdCI6MTQ1MTQ4MjAyMiwiZXhwIjoxNDUyNjkxNjIyLCJ1c2VyX2lkIjoiMTYwNjE3MTA5MTk3MTU3ODU4MTIiLCJlbWFpbCI6InJlLnRmQGFjbS5vcmciLCJwcm92aWRlcl9pZCI6ImZhY2Vib29rLmNvbSIsInZlcmlmaWVkIjpmYWxzZSwiZGlzcGxheV9uYW1lIjoiUmVuYXRvIFRlZ29uIEZvcnRpIiwicGhvdG9fdXJsIjoiaHR0cHM6Ly9zY29udGVudC54eC5mYmNkbi5uZXQvaHByb2ZpbGUtZnJjMy92L3QxLjAtMS9jMC4wLjUwLjUwL3A1MHg1MC8xMTQ4ODU4XzEwMjAyMjgwNDcyOTEwMjQ1XzEyNjE1MjQ1Mzdfbi5qcGc_b2hcdTAwM2RhYjEwNWFhNzk4M2NiZTQ2YmQ2OGNhMjg5ZGQ4YzIxY1x1MDAyNm9lXHUwMDNkNTcxMkM4NzYifQ.Z5h8EML-VuYDO1eXXnWc18WU_O4Kdwjgu_hJk7rbyUE2gMjrL3f4DrGaMcd06TCyMSNBOoR6IZCn0h46lpR93PxbOjkOvpb9Nl_7Fc1UbftMCofD15vyP0s2ZpgOc4mLyF9VhDoz2D3fG4f5wBtucd5HhBU1vQSWj7pjvcQ6pT30gbCJx0-BC-Yj2qJCxoHPQedTtkyMJlFrnM1e5QofWFCntYsmjPVRCm8IWtQt0fcVHYie918jxlEKjOfjmqjLTkBSkNBt6xs5_5uOE5Ghg8r-Q9WiYqx92dGG8z8o29a649rvLnOypoM-xxfdUZ1S2wiuaxFAP8-KmJHcDE1gLQ
W 05:27:18.939 com.google.identitytoolkit.RpcHelper initRsaSHA256Signer: can not initialize service account signer: DerInputStream.getLength(): lengthTag=111, too big.
java.io.IOException: DerInputStream.getLength(): lengthTag=111, too big.
at sun.security.util.DerInputStream.getLength(DerInputStream.java:561)
at sun.security.util.DerValue.init(DerValue.java:365)
at sun.security.util.DerValue.<init>(DerValue.java:320)
at sun.security.pkcs12.PKCS12KeyStore.engineLoad(PKCS12KeyStore.java:1233)
at java.security.KeyStore.load(KeyStore.java:1226)
at com.google.identitytoolkit.RpcHelper.initRsaSHA256Signer(RpcHelper.java:308)
at com.google.identitytoolkit.RpcHelper.<init>(RpcHelper.java:65)
at com.google.identitytoolkit.GitkitClient.<init>(GitkitClient.java:112)
at com.google.identitytoolkit.GitkitClient$Builder.build(GitkitClient.java:681)
at com.rave79.MyCustomAuthenticator.authenticate(MyCustomAuthenticator.java:75)
at com.google.api.server.spi.request.Auth.authenticate(Auth.java:85)
at com.google.api.server.spi.request.Auth.authenticateAppEngineUser(Auth.java:103)
at com.google.api.server.spi.request.ServletRequestParamReader.getAppEngineUser(ServletRequestParamReader.java:164)
at com.google.api.server.spi.request.ServletRequestParamReader.deserializeParams(ServletRequestParamReader.java:120)
at com.google.api.server.spi.request.ServletRequestParamReader.read(ServletRequestParamReader.java:263)
at com.google.api.server.spi.SystemService.invokeServiceMethod(SystemService.java:354)
at com.google.api.server.spi.SystemServiceServlet.execute(SystemServiceServlet.java:113)
at com.google.api.server.spi.SystemServiceServlet.doPost(SystemServiceServlet.java:71)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:125)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:37)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.JdbcMySqlConnectionCleanupFilter.doFilter(JdbcMySqlConnectionCleanupFilter.java:60)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:260)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
at com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:78)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:148)
at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:469)
at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:437)
at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:444)
at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:256)
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:308)
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:300)
at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:441)
at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:235)
at java.lang.Thread.run(Thread.java:745)
W 05:27:18.940 com.google.identitytoolkit.RpcHelper initRsaSHA256Signer: service account is set to null due to: email = xp...@xpto.iam.gserviceaccount.com = java.io.FileInputStream@3c018d
W 05:27:18.940 com.rave79.MyCustomAuthenticator authenticate: after build
W 05:27:18.941 /_ah/spi/com.rave79.endpoint.LiveEndpoint.get
java.lang.NullPointerException
at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:213)
at net.oauth.jsontoken.JsonToken.<init>(JsonToken.java:83)
at net.oauth.jsontoken.JsonToken.<init>(JsonToken.java:73)
at com.google.identitytoolkit.RpcHelper.signServiceAccountRequest(RpcHelper.java:280)
at com.google.identitytoolkit.RpcHelper.getAccessToken(RpcHelper.java:269)
at com.google.identitytoolkit.RpcHelper.downloadCerts(RpcHelper.java:242)
at com.google.identitytoolkit.GitkitVerifierManager.initVerifiers(GitkitVerifierManager.java:75)
at com.google.identitytoolkit.GitkitVerifierManager.findVerifier(GitkitVerifierManager.java:65)
at net.oauth.jsontoken.JsonTokenParser.provideVerifiers(JsonTokenParser.java:230)
at net.oauth.jsontoken.JsonTokenParser.verify(JsonTokenParser.java:102)
at net.oauth.jsontoken.JsonTokenParser.verifyAndDeserialize(JsonTokenParser.java:116)
at com.google.identitytoolkit.JsonTokenHelper.verifyAndDeserialize(JsonTokenHelper.java:54)
at com.google.identitytoolkit.GitkitClient.validateTokenToJson(GitkitClient.java:170)
at com.rave79.MyCustomAuthenticator.authenticate(MyCustomAuthenticator.java:85)
at com.google.api.server.spi.request.Auth.authenticate(Auth.java:85)
at com.google.api.server.spi.request.Auth.authenticateAppEngineUser(Auth.java:103)
at com.google.api.server.spi.request.ServletRequestParamReader.getAppEngineUser(ServletRequestParamReader.java:164)
at com.google.api.server.spi.request.ServletRequestParamReader.deserializeParams(ServletRequestParamReader.java:120)
at com.google.api.server.spi.request.ServletRequestParamReader.read(ServletRequestParamReader.java:263)
at com.google.api.server.spi.SystemService.invokeServiceMethod(SystemService.java:354)
at com.google.api.server.spi.SystemServiceServlet.execute(SystemServiceServlet.java:113)
at com.google.api.server.spi.SystemServiceServlet.doPost(SystemServiceServlet.java:71)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:125)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:37)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.JdbcMySqlConnectionCleanupFilter.doFilter(JdbcMySqlConnectionCleanupFilter.java:60)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:260)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
at com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:78)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:148)
at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:469)
at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:437)
at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:444)
at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:256)
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:308)
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:300)
at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:441)
at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:235)
at java.lang.Thread.run(Thread.java:745)
F 05:27:18.943 Uncaught exception from servlet
java.lang.NullPointerException
at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:213)
at net.oauth.jsontoken.JsonToken.<init>(JsonToken.java:83)
at net.oauth.jsontoken.JsonToken.<init>(JsonToken.java:73)
at com.google.identitytoolkit.RpcHelper.signServiceAccountRequest(RpcHelper.java:280)
at com.google.identitytoolkit.RpcHelper.getAccessToken(RpcHelper.java:269)
at com.google.identitytoolkit.RpcHelper.downloadCerts(RpcHelper.java:242)
at com.google.identitytoolkit.GitkitVerifierManager.initVerifiers(GitkitVerifierManager.java:75)
at com.google.identitytoolkit.GitkitVerifierManager.findVerifier(GitkitVerifierManager.java:65)
at net.oauth.jsontoken.JsonTokenParser.provideVerifiers(JsonTokenParser.java:230)
at net.oauth.jsontoken.JsonTokenParser.verify(JsonTokenParser.java:102)
at net.oauth.jsontoken.JsonTokenParser.verifyAndDeserialize(JsonTokenParser.java:116)
at com.google.identitytoolkit.JsonTokenHelper.verifyAndDeserialize(JsonTokenHelper.java:54)
at com.google.identitytoolkit.GitkitClient.validateTokenToJson(GitkitClient.java:170)
at com.rave79.MyCustomAuthenticator.authenticate(MyCustomAuthenticator.java:85)
at com.google.api.server.spi.request.Auth.authenticate(Auth.java:85)
at com.google.api.server.spi.request.Auth.authenticateAppEngineUser(Auth.java:103)
at com.google.api.server.spi.request.ServletRequestParamReader.getAppEngineUser(ServletRequestParamReader.java:164)
at com.google.api.server.spi.request.ServletRequestParamReader.deserializeParams(ServletRequestParamReader.java:120)
at com.google.api.server.spi.request.ServletRequestParamReader.read(ServletRequestParamReader.java:263)
at com.google.api.server.spi.SystemService.invokeServiceMethod(SystemService.java:354)
at com.google.api.server.spi.SystemServiceServlet.execute(SystemServiceServlet.java:113)
at com.google.api.server.spi.SystemServiceServlet.doPost(SystemServiceServlet.java:71)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:125)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:37)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.JdbcMySqlConnectionCleanupFilter.doFilter(JdbcMySqlConnectionCleanupFilter.java:60)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:260)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
at com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:78)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:148)
at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run(JavaRuntime.java:469)
at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:437)
at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:444)
at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:256)
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:308)
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:300)
at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:441)
at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run(ThreadGroupPool.java:235)
at java.lang.Thread.run(Thread.java:745)
)
.setServiceAccountEmail("xpto@xpto.iam.gserviceaccount.com")
.setKeyStream(new FileInputStream("WEB-INF/rave79-a21cc69d2616.p12"))
.setWidgetUrl("https://rave79-1979.appspot.com/uiwidgets/gitkit-signin-button.html")
.build();
log.warning("after build");
if(gitkitClient.validateTokenToJson(token)==null){
log.warning("j==null");
}
} catch (FileNotFoundException e) {
log.warning(e.getMessage());
}
catch (GitkitClientException e1) {
log.warning(e1.getMessage());
}
catch (IOException e2) {
log.warning(e2.getMessage());
}
}
...