我希望通过添加access_token参数来使用REST调用访问Firebase.
使用Node.js Admin SDK创建access_token,使用以下代码:
var admin = require("firebase-admin"); var serviceAccount = require("./pk.json"); admin.initializeApp({ credential: admin.credential.cert(serviceAccount),databaseURL: "https://XXX.firebaseio.com" }); var uid = "1234"; admin.auth().createCustomToken(uid) .then(function(customToken) { // Send token back to client console.log("Token: "+customToken); }) .catch(function(error) { console.log("Error creating custom token:",error); });
问题是,如果我从Node.js创建令牌并将其用于我的REST调用,则会收到未经授权的请求错误.
我已经读过一些问题,人们在发布令牌时添加了范围参数,但是没有找到使用Node.js Admin SDK的方法.
谷歌的文档并没有详细解释这个问题.知道我可能尝试解决这个问题吗?
解决方法
要对Firebase REST API进行身份验证,您有两种选择:Firebase ID令牌(用于基于用户的访问)或Google OAuth2访问令牌(用于管理员访问).
使用Firebase ID令牌进行身份验证
有关如何在各种Firebase客户端SDK中检索访问令牌的说明,请参阅Retrieve ID tokens on the client.您还可以通过未记录的REST API为ID令牌交换Firebase自定义令牌并刷新令牌对:
端点:https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyCustomToken?key=\u0026lt;API_KEY\u0026gt;
方法:POST
请求正文:{“token”:< CUSTOM_TOKEN>,“returnSecureToken”:true}
< API_KEY>与您在Firebase客户端中使用的Firebase控制台获得的API密钥相同. < CUSTOM_TOKEN>是Firebase自定义令牌.
由于ID令牌在一小时后过期,您将需要使用刷新令牌通过其他未记录的REST API刷新它们:
端点:https://securetoken.googleapis.com/v1/token?key =< APPI_KEY>
方法:POST
请求正文:{“refresh_token”:< REFRESH_TOKEN>,“grant_type”:“refresh_token”}
< API_KEY>是与以前相同的API密钥. < REFRESH_TOKEN>是来自先前API调用的刷新令牌.
获得ID令牌后,可以通过auth query参数将其传递给REST API以验证请求.该请求尊重Firebase安全规则,就像登录客户端的最终用户发出请求一样.
使用Google Access令牌进行身份验证
要使用Google OAuth2访问令牌进行身份验证,您需要做的第一件事就是获取一个.有关如何执行此操作的说明,请参阅Retrieving an access token.它目前只包含一个Java示例,但这可以用于许多语言,包括Node.js.获得ID令牌后,可以通过access_token查询参数将其传递给REST API以验证请求.该请求将通过管理员访问权限进行,覆盖所有Firebase安全规则并授予完整的读写访问权限.