Gitkit Java 客户端库 - 验证令牌签名时遇到问题:受众无效

Gitkit Java client library - Trouble verifying token signature: Invalid audience

我们在令牌验证期间遇到问题。我们有以下例外情况:

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,或者当我们改变它时解析错误......)但是由于验证器为空而验证失败...... 这是:

    {
    "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"
    }

当然,我们可以提供可能需要的任何其他信息,我们真的被这个问题困住了!

提前感谢任何线索!

我遇到了同样的错误,偶然发现了这个线程。我使用的是 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();

我将分享我今天早些时候设置的经验,以防对您有所帮助:

                        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");

我认为德国足协的回答是正确的。

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

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

我查看了 gitkitclient.js source codeprojectIdclientId 都添加到同一个 观众数组。

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

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