Gitkit Java客户端库 - 验证令牌签名的麻烦:无效的受众

时间:2016-01-22 14:20:39

标签: google-identity-toolkit

我们在令牌验证过程中遇到问题。我们有以下例外:

java.security.SignatureException: Invalid audience: xxx-platform. Should be: 787384428332-32charsofidxxxxxxxx.apps.googleusercontent.com
    at com.google.identitytoolkit.JsonTokenHelper$AudienceChecker.check(JsonTokenHelper.java:67)
    at net.oauth.jsontoken.JsonTokenParser.verify(JsonTokenParser.java:156)
    at net.oauth.jsontoken.JsonTokenParser.verify(JsonTokenParser.java:103)
    at net.oauth.jsontoken.JsonTokenParser.verifyAndDeserialize(JsonTokenParser.java:116)
    at com.google.identitytoolkit.JsonTokenHelper.verifyAndDeserialize(JsonTokenHelper.java:46)
    at com.google.identitytoolkit.GitkitClient.validateToken(GitkitClient.java:126)
    at com.google.identitytoolkit.GitkitClient.validateTokenInRequest(GitkitClient.java:154)
    at com.some.package.user.GitKitUserService.getGitkitUserFromRequest(GitKitUserService.groovy:25)

我们已多次检查gitkit-server-config.json文件,他似乎正确并指向一个有效的.p12文件。正确找到并打开了p12(因为当我们删除它时我们有一个FileNotFoundException,或者当我们改变它时解析错误...)但由于null验证器验证失败... 这是:

    {
    "clientId": "707385568332-32charsofidxxxxxxxx.apps.googleusercontent.com",
    "projectId": "xxx-platform",
    "serviceAccountEmail": "xxx@xxx-platform.iam.gserviceaccount.com",
    "serviceAccountPrivateKeyFile": "/an/existing/path/xxx-platform-44d0379d237c.p12",
    "widgetUrl": "https://example.com/authentication/authenticate",
    "cookieName": "gtoken"
    }

当然,我们可以提供可能需要的任何其他信息,我们真正坚持这个问题!

提前感谢任何线索!

4 个答案:

答案 0 :(得分:1)

我认为DFB的答案是正确的。

但我们不建议在Java代码中使用硬编码的json配置。有一个名为createFromJson的静态方法,您可以使用它来读取json文件,然后初始化GitkitClient。

我们还需要更新identity-toolkit-java-client中的README。谢谢你的提问。

答案 1 :(得分:0)

我遇到了同样的错误并偶然发现了这个帖子。我正在使用gitclient-1.2.3.jar。我将它更新为gitkitclient-1.2.5.jar(最新版),问题就消失了。

更新:我正在添加下面的代码段。我正在设置setGoogleClientIdsetProjectId,如示例https://github.com/google/identity-toolkit-java-client/blob/master/src/main/java/com/google/identitytoolkit/GitkitClient.java

所示
GitkitClient gitkitClient = new GitkitClient.Builder()  
    .setGoogleClientId("654028407702-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com")  
    .setProjectId("my-project")  
    .setServiceAccountEmail("my-project@my-project.iam.gserviceaccount.com")  
    .setKeyStream(context.getResourceAsStream("/WEB-INF/identity/my-project-xxxxxxxxxxxx.p12"))  
    .setWidgetUrl("https://my-project.appspot.com/oauth2callback")  
    .setCookieName("gToken")  
    .setServerApiKey("AIzaSyAxQ7z5Dxxxxxxxxxxxxxx-xxxxxxxx")  
    .build();

答案 2 :(得分:0)

我只是分享我今天早些时候建立的经验,这可以帮助你:

                        String token = cookie.getValue();

                        try {
                            GitkitClient gitkitClient = GitkitClient.newBuilder()
                                    .setGoogleClientId("206268081687-u5mg1cl3teeeo635vrsuj8uotdi7meqq.apps.googleusercontent.com")
                                    //.setGoogleClientId("effortless-edge-119904")
                                    .setServiceAccountEmail("tables@effortless-edge-119904.iam.gserviceaccount.com")
                                    .setCookieName("gtoken")
                                    .setWidgetUrl("http://localhost:8080/gitkit")
                                    .setKeyStream(new ClassPathResource("tables-8271416a8e0c.p12").getInputStream()).build();

                            GitkitUser gitkitUser = gitkitClient.validateToken(token);

给我

java.security.SignatureException: Gitkit token audience(effortless-edge-119904) 
doesn't match projectId or clientId in server configuration

这有效:

                        try {
                            GitkitClient gitkitClient = GitkitClient.newBuilder()
                                    .setGoogleClientId("effortless-edge-119904")
                                    .setServiceAccountEmail("tables@effortless-edge-119904.iam.gserviceaccount.com")
                                    .setCookieName("gtoken")
                                    .setWidgetUrl("http://localhost:8080/gitkit")
                                    .setKeyStream(new ClassPathResource("tables-8271416a8e0c.p12").getInputStream()).build();

                            GitkitUser gitkitUser = gitkitClient.validateToken(token);
                                                    logger.info("Validated gitkit token");

答案 3 :(得分:0)

我查看了gitkitclient.js source code projectId clientId 都添加到了相同的受众群体数组中。

经过多次测试后,我发现你只能将项目ID('my-project-name')放在gitkit-server-config.json文件中。 令人讨厌的是,如果你用'clientId'属性名称添加它,它也可以...

据我所知,客户ID(如654028407702-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com)可以删除。