首页 > 解决方案 > 使用 Firebase 时出现 SunCertPathBuilderException

问题描述

我有一个在 Glassfish 服务器上与 Jersey 一起运行的 Java Rest API,我使用 Firebase Auth 对我的用户进行身份验证。所以我使用 Firebase Admin SDK 来验证令牌FirebaseAuth.getInstance().verifyIdToken(idToken)

但它会引发以下错误:

sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径

我通过调用正确初始化我的应用程序:

FirebaseOptions options = new FirebaseOptions.Builder().setCredentials(GoogleCredentials.fromStream(serviceAccountStream)).build();

使用 serviceAccountStream 向我的服务帐户 JSON 文件添加 InputStream。

编辑:我在使用 Firebase 的身份验证模拟器和其他 Firebase 服务(如 Firestore)时遇到了同样的问题,这很奇怪

标签: javafirebase-authenticationfirebase-admin

解决方案


问题来自您使用的旧库。以下代码在 SpringBoot 2.5 设置上运行良好:

    try {
        InputStream serviceAccount credStream = getClass().getResourceAsStream(credsPath);

        FirebaseOptions options = new FirebaseOptions.Builder()
                .setCredentials(GoogleCredentials.fromStream(credStream))
                .setDatabaseUrl(databaseURL)
                .build();
        FirebaseApp.initializeApp(options);
    } catch (Exception e) {
        logger.error(e.getMessage());
    } finally {
        ...
    }

如果无法升级库,则需要将服务器证书添加到 trustStore。请在此处查看步骤:Java:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效认证路径


推荐阅读