将firebase server sdk凭据与REST API一起重用

将firebase server sdk凭据与REST API一起重用,firebase,firebase-authentication,Firebase,Firebase Authentication,在Firebase的旧版本中,我用Java编写的服务器应用程序将使用secret和JWT令牌生成器与我的后端进行身份验证。然后,在任何时候,我都可以调用Firebase.getAuth().getToken(),并在HTTP调用中重用该令牌作为auth参数 使用新的firebase server sdk,我将如何在REST API中重用有限的服务帐户凭据/令牌 Map<String, Object> auth = new HashMap<String, Object>()

在Firebase的旧版本中,我用Java编写的服务器应用程序将使用secret和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);
我已尝试添加
access\u令牌
auth
参数。似乎
createCustomToken
方法生成了一个有效的JWT,但RESTAPI没有响应

当我传入该
createCustomToken
返回值作为
auth
参数时,我得到以下消息:

"error" : "Missing claim 'kid' in auth header."
当我传入该
createCustomToken
返回值作为
access_token
param时,我得到了基本的
权限拒绝
API响应


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

您尝试使用的令牌是firebase身份验证ID令牌-设计用于在客户端上传递给firebase sdk的类型。RESTAPI接受Firebase访问令牌(就像以前Firebase客户端中的令牌一样)

您的身份验证失败,因为Firebase SDK通常负责将您的ID令牌转换为访问令牌。您的服务器无法使用Firebase SDK执行此转换或生成访问令牌,因此我建议使用原始Firebase密钥为REST API创建访问令牌。即使对于自I/O发布以来创建的新Firebase项目,这也可以正常工作


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

您尝试使用的令牌是Firebase身份验证ID令牌-设计用于在客户端上传递给Firebase SDK的类型。RESTAPI接受Firebase访问令牌(就像以前Firebase客户端中的令牌一样)

您的身份验证失败,因为Firebase SDK通常负责将您的ID令牌转换为访问令牌。您的服务器无法使用Firebase SDK执行此转换或生成访问令牌,因此我建议使用原始Firebase密钥为REST API创建访问令牌。即使对于自I/O发布以来创建的新Firebase项目,这也可以正常工作


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

鉴于未记录属性的名称,我肯定不建议这样做,但是


如果您的SDK已使用serviceAccount登录,则可以使用
firebase.auth().INTERNAL.getToken()
,它返回一个承诺的
accessToken
(和
expirationTime
),然后与
?access\u token
参数一起使用。

鉴于未记录属性的名称,我确信不建议这样做,但是


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

我应该添加这是针对node.js SDK的。我应该添加这是针对node.js SDK的。Abe,由于现在不推荐使用数据库机密,您对此有更新吗?Abe,由于现在不推荐使用数据库机密,您对此有更新吗?
"error" : "Missing claim 'kid' in auth header."