2016-07-30 57 views
0

在旧版本的Firebase中,我用Java编写的服务器应用程序将使用秘密和JWT令牌生成器与我的后端进行身份验证。然后,在任何时候,我都可以拨打Firebase.getAuth().getToken()并在HTTP调用中重新使用该令牌作为auth参数。通过REST API重新使用firebase-server-sdk凭证

随着新的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_tokenauth PARAM。似乎createCustomToken方法会生成有效的JWT,但REST API没有响应。

当我通过在createCustomToken返回值作为auth PARAM,我得到以下信息:

"error" : "Missing claim 'kid' in auth header." 

当我通过在createCustomToken返回值作为access_token PARAM,我得到的基本Permission denied API响应。

有没有一种简单的方法可以在REST API调用中重用我现有的firebase-server-sdk凭据?

回答

1

您尝试使用的令牌是Firebase身份验证ID令牌 - 旨在传递给客户端上的Firebase SDK的类型。 REST API接受Firebase访问令牌(与以前的Firebase客户端中的令牌一样)。

您的身份验证失败,因为通常情况下,Firebase SDK负责将您的ID令牌转换为访问令牌。您的服务器可以而不是使用Firebase SDK执行此转换或生成访问令牌,因此我建议将原始Firebase Token Generator library与您的Firebase秘密配合使用以为REST API创建访问令牌。即使对于自I/O发布后创建的新Firebase项目,这也可以正常工作。

注意:在控制台中,可以在(齿轮图标)>项目设置>数据库下找到您的数据库密钥。

+0

Abe,你有这方面的更新,因为数据库的秘密现在被弃用? –

1

我敢肯定,这是不建议,因为无证属性的名称,但...

如果你的SDK已经与serviceAccount登录后,就可以使用firebase.auth().INTERNAL.getToken(),它返回一个承诺accessToken(和expirationTime),然后与?access_token参数一起使用。

+0

我应该补充说这是用于node.js SDK的。 –

相关问题