【发布时间】:2016-07-30 18:10:31
【问题描述】:
在旧版本的 Firebase 中,我用 Java 编写的服务器应用程序将使用密钥和 JWT 令牌生成器通过我的后端进行身份验证。然后,在任何时候,我都可以调用 Firebase.getAuth().getToken() 并在 HTTP 调用中重用该令牌作为 auth 参数。
使用新的firebase-server-sdk,我将如何通过 REST API 重复使用我有限的服务帐户凭据/令牌?
Map<String, Object> auth = new HashMap<String, Object>();
auth.put("uid", "server-app");
FirebaseOptions options = new FirebaseOptions.Builder()
.setDatabaseUrl(Environment.FIREBASE_URL)
.setServiceAccount(MyClass.class.getResourceAsStream("/keys/dev.json"))
.setDatabaseAuthVariableOverride(auth)
.build();
FirebaseApp.initializeApp(options);
当我使用 SDK 订阅/写入某些位置时,一切都很好 - 特别是需要 server-app uid 的位置。但我在我的服务器应用程序中结合使用 REST,因为我希望我的服务器应用程序进行同步读取,Firebase 仅通过 REST API 支持。
FirebaseRestClient firebaseRest = new RestAdapter.Builder()
.setEndpoint(Environment.FIREBASE_URL)
.setRequestInterceptor(new RequestInterceptor() {
@Override
public void intercept(final RequestFacade request) {
request.addQueryParam("access_token", FirebaseAuth.getInstance().createCustomToken("server-app"));
}
})
.build().create(FirebaseRestClient.class);
我尝试添加 access_token 和 auth 参数。 createCustomToken 方法似乎生成了一个有效的 JWT,但 REST API 没有响应。
当我将 createCustomToken 返回值作为 auth 参数传递时,我收到以下消息:
"error" : "Missing claim 'kid' in auth header."
当我将 createCustomToken 返回值作为 access_token 参数传递时,我得到基本的 Permission denied API 响应。
有没有一种简单的方法可以在 REST API 调用中重用我现有的 firebase-server-sdk 凭据?
【问题讨论】:
标签: firebase firebase-authentication