【问题标题】:Gitkit Java client library - Trouble verifying token signature: Invalid audienceGitkit Java 客户端库 - 验证令牌签名时遇到问题:无效的受众
【发布时间】:2016-01-22 14:20:38
【问题描述】:

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

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

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

提前感谢任何线索!

【问题讨论】:

  • 尝试交换 clientId 和 projectId 值?测试时注销或使用隐身模式,否则旧配置可能会缓存在浏览器的令牌中。
  • 您好 Chomeh,非常感谢您的回复。是的,我们已经做过很多次了,唉......

标签: google-identity-toolkit


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 太棒了!!!!非常感谢(当然也感谢德国足协)。这行得通!我们必须像您一样使用“项目 ID”,而不是客户 ID!我认为 Gitkit 命名约定有些混乱,或者我需要休息一下……祝你有美好的一天,你救了我的!
    • 我也觉得很困惑,很高兴能帮上忙。
    【解决方案3】:

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

    更新:我在下面添加代码 sn-p。我正在设置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();
    

    【讨论】:

    • 德国足协您好,非常感谢您的回复!不幸的是,我只是仔细检查了一下,我们已经在使用 1.2.5 版本:我们的构建配置文件中有“compile 'com.google.identitytoolkit:gitkitclient:1.2.5'”...祝你有美好的一天,无论如何,再次感谢您的支持。
    • 很高兴它为您工作。我也添加了我的代码 sn-p。
    • 嗨@DFB,也感谢您的回复。令人不安的是,您遵循 Google 指南的配置有效……我不明白为什么我必须将 projectId 用于 clientId。非常烦人,即使它有效。而且我认为我们稍后会被这种错误配置所困扰:例如,通过电子邮件发送的密码重置链接无效(打开此类链接时,我们会收到“您的密码重置链接无效或过期”消息。
    【解决方案4】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-11-15
      • 2021-02-18
      • 1970-01-01
      • 1970-01-01
      • 2021-08-10
      • 1970-01-01
      • 2017-12-15
      • 2021-03-21
      • 2018-01-01
      相关资源
      最近更新 更多