gpt4 book ai didi

node.js - 使用 node.js admin sdk 创建 token 时的 Firebase REST 身份验证

转载 作者:搜寻专家 更新时间:2023-10-31 22:18:27 25 4
gpt4 key购买 nike

我知道这个问题在这里被问了很多,但我似乎仍然无法找到可以解决我的问题的确切答案。

我希望通过添加 access_token 参数使用 REST 调用访问 Firebase。

access_token 是使用 Node.js Admin SDK 创建的,代码如下:

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 创建的 token 并将其用于我的 REST 调用,我会收到一个 Unauthorized request 错误。

我在一些问题中读到,人们在颁发 token 时添加了范围参数,但还没有找到使用 Node.js Admin SDK 来做到这一点的方法。

Google 的文档没有详细说明这个问题。知道我可以尝试解决这个问题吗?

最佳答案

您用于向 Firebase REST API 进行身份验证的 token 不是正确的 token 类型。您正在使用 Firebase Auth 自定义 token ,它只能用于通过 signInWithCustomToken() 对其中一个 Firebase 客户端 SDK 进行身份验证。 Sign in using custom tokens on clients 中解释的方法.

为了向 Firebase REST API 进行身份验证,您有两种选择:Firebase ID token (用于基于用户的访问)或 Google OAuth2 访问 token (用于管理员访问)。

使用 Firebase ID token 进行身份验证

参见 Retrieve ID tokens on the client有关如何在各种 Firebase 客户端 SDK 中检索访问 token 的说明。您还可以通过未记录的 REST API 将 Firebase 自定义 token 交换为 ID token 和刷新 token 对:

端点: https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyCustomToken?key=<API_KEY>

方法: POST

请求正文: { "token": <CUSTOM_TOKEN>, "returnSecureToken": true }

<API_KEY>与您从 Firebase 控制台获得的 API key 与您在 Firebase 客户端中使用的 API key 相同。 <CUSTOM_TOKEN>是一个 Firebase 自定义 token 。

由于 ID token 在一小时后过期,您将需要使用刷新 token 通过此其他未记录的 REST API 刷新它们:

端点: https://securetoken.googleapis.com/v1/token?key=<API_KEY>

方法: POST

请求正文: { "refresh_token": <REFRESH_TOKEN>, "grant_type": "refresh_token" }

<API_KEY>是与以前相同的 API key 。 <REFRESH_TOKEN>是来自先前 API 调用的刷新 token 。

获得 ID token 后,您可以通过 auth 将其传递给 REST API用于验证请求的查询参数。该请求遵守 Firebase 安全规则,就好像登录客户端的最终用户正在发出请求一样。

使用 Google 访问 token 进行身份验证

要使用 Google OAuth2 访问 token 进行身份验证,您需要做的第一件事就是获取一个。参见 Retrieving an access token有关如何执行此操作的说明。它目前只包含一个 Java 示例,但这在许多语言中都是可能的,包括 Node.js。获得 ID token 后,您可以通过 access_token 将其传递给 REST API用于验证请求的查询参数。该请求将以管理员权限发出,覆盖所有 Firebase 安全规则并授予完整的读写权限。

关于node.js - 使用 node.js admin sdk 创建 token 时的 Firebase REST 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42927643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com