【发布时间】:2018-01-17 07:17:24
【问题描述】:
问候。 我正在使用自定义现有后端(Spring Boot)为我的移动应用程序实施 Firebase 身份验证。 我通过在移动应用程序中使用 firebase 成功在 facebook 中进行身份验证 => 想要将用户信息存储在我的后端数据库(不是 firebase)。
卡住调试令牌验证错误。
令牌验证 - 几乎与谷歌文档中的相同:
try {
FirebaseToken decodedToken = Tasks.await(
FirebaseAuth.getInstance().verifyIdToken(info.getToken()));
} catch (ExecutionException | InterruptedException | IllegalArgumentException e) {
logger.error(e.getMessage());
}
收到错误:java.lang.IllegalArgumentException
并且无法找出/调试导致它的原因。
相关 - firebase 配置:
@Configuration
public class FirebaseConfig {
private final static Logger logger = LogManager.getLogger(FirebaseConfig.class.getName());
@Value("classpath:firebase_config.json")
private Resource firebase_config;
@PostConstruct
public void init() throws IOException {
FileInputStream serviceAccount = new FileInputStream(firebase_config.getFile());
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredential(FirebaseCredentials.fromCertificate(serviceAccount))
.setDatabaseUrl("https://******-81233.firebaseio.com")
.build();
FirebaseApp.initializeApp(options);
logger.info("Firebase init done");
}
}
更新: 补充:
FirebaseAuth.getInstance().verifyIdToken(info.getToken()).addOnFailureListener(e -> {
System.err.println("Error verifying token: " + e.getMessage());
});
我得到的错误只是null,它没有说明它的起源。
【问题讨论】:
-
首先,请添加整个回溯。您可以使用
Tasks.await( FirebaseAuth.getInstance().verifyIdToken(info.getToken()));让请求失败,或者使用FirebaseAuth.getInstance().verifyIdToken(info.getToken()).addOnFailureListener(Throwable::printStackTrace);显式打印它 -
然后确保您的令牌与格式匹配。您可以查看
com.google.api.client.json.webtoken.JsonWebSignature$Parser.parse方法(我的源代码中的 JsonWebSignature.java:599) - 它包含一个前置条件检查,如果令牌不包含点,它将失败并显示IllegalArgumentException和null消息
标签: java spring firebase firebase-authentication