Firebase Push - 身份验证凭据无效

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Firebase Push - 身份验证凭据无效相关的知识,希望对你有一定的参考价值。

我在基于Spring的应用服务器中使用Firebase Cloud Messaging REST API将推送消息发送到我的应用客户端。

从我的IDE运行时,一切都很完美。问题是当从打包的JAR文件运行并尝试发送推送消息时,我得到:“身份验证凭据无效”和状态代码401。

我的service-account.json文件位于resources文件夹下,该文件夹被添加到类路径中:

service-account.json

我通过以下方式访问它:

    private String getAccessToken() throws IOException {
    Resource resource = new ClassPathResource("service-account.json");
    GoogleCredential googleCredential = GoogleCredential
            .fromStream(resource.getInputStream())
            .createScoped(Collections.singletonList("https://www.googleapis.com/auth/firebase.messaging"));
    googleCredential.refreshToken();
    return googleCredential.getAccessToken();
}

我还尝试了不同的方法来访问service-account.json,例如将它放在项目根目录中并像这样检索它:

private String getAccessToken() throws IOException {
    File file = new File("service-account.json");
    GoogleCredential googleCredential = GoogleCredential
            .fromStream(new FileInputStream(file))
            .createScoped(Collections.singletonList("https://www.googleapis.com/auth/firebase.messaging"));
    googleCredential.refreshToken();
    return googleCredential.getAccessToken();
}

从打包的JAR运行时,我在JAR外部提供了service-account.json文件,与JAR位于同一文件夹中。这导致了同样的错误。

我真的不确定为什么会这样,任何帮助或猜测都会受到赞赏。

答案

最终我通过从应用程序外部接收service-account.json的完整路径来解决它:

@Value("${service.account.path}")
private String serviceAccountPath;

在application.properties中:

service.account.path = /path/to/service-account.json

和代码:

private String getAccessToken() throws IOException {
    GoogleCredential googleCredential = GoogleCredential
            .fromStream(getServiceAccountInputStream())
            .createScoped(Collections.singletonList("https://www.googleapis.com/auth/firebase.messaging"));
    googleCredential.refreshToken();
    return googleCredential.getAccessToken();
}

private InputStream getServiceAccountInputStream() {
    File file = new File(serviceAccountPath);
    try {
        return new FileInputStream(file);
    } catch (FileNotFoundException e) {
        throw new RuntimeException("Couldn't find service-account.json");
    }
}

以上是关于Firebase Push - 身份验证凭据无效的主要内容,如果未能解决你的问题,请参考以下文章

Firebase Facebook 身份验证:格式错误或过期的身份验证凭据

Firebase-tools 升级后 Firebase-functions 身份验证失败

无效的凭据引发身份验证突变异常

请求具有无效的身份验证凭据。预期的 OAuth 2 访问令牌、登录 cookie 或其他有效的身份验证凭据 automl

FCM 推送 - 请求具有无效的身份验证凭据。预期的 OAuth 2 访问令牌、登录 cookie 或其他有效的身份验证凭据

Jwt 身份验证问题 - 凭据无效