Firebase 实时数据库 REST API 返回未经授权,即使使用令牌

问题描述 投票:0回答:2

我正在编写一个连接到 Firebase 实时数据库的 Blazor Server 应用程序。我正在使用 FirebaseDatabase SDK,但需要执行一组更新多个路径的原子操作。由于 SDK 没有相应的方法,我决定使用 REST API。

我已经能够使用电子邮件/通行证进行身份验证,这使我可以访问 currentUser.GetIdTokenAsync();

我能够在单个 Put/Patch 操作中读取/写入数据。

但是,当我尝试使用 REST API 更新路径时,它失败并显示:“未经授权”。

为了测试这一点,我编写了一个简单的代码,如下:

public async Task singleUpdate(string idPropriedade, string idLote, string novoNome)
{
    // Firebase database URL
    string firebaseUrl = DatabaseProjectSettings.projectURL;

    // Define the updates for each path
    string jsonContent = 
        "{" +
            "\"lotes\": {" +
                "\"" + idPropriedade + "\": {" +
                    "\"" + idLote + "\": {" +
                        "\"nomePropriedade\": \"" + novoNome + "\"" +
                    "}" +
                "}" +
            "}" +
        "}";


    var token = await _currUser.GetIdTokenAsync(true);


    // Create HttpClient instance
    using (HttpClient client = new HttpClient())
    {
        // Configure the request
        HttpRequestMessage request = new HttpRequestMessage
        {
            Method = HttpMethod.Put,
            RequestUri = new Uri($"{firebaseUrl}.json"),
            Content = new StringContent(jsonContent, System.Text.Encoding.UTF8, "application/json")
        };
        request.Headers.Add("Authorization", $"Bearer {token}");

        // Send the request and get the response
        HttpResponseMessage response = await client.SendAsync(request);

        // Check if the request was successful
        if (response.IsSuccessStatusCode)
        {
            Console.WriteLine("Paths updated successfully.");
        }
        else
        {
            Console.WriteLine($"Failed to update paths. Status code: {response.StatusCode}");
        }
    }
}

如果我删除数据库规则,写入操作可以正常工作。如果我离开数据库规则,我会收到“未经授权”消息。

我已经测试过在 URL 上使用令牌,如下所示:

RequestUri = new Uri($"{firebaseUrl}.json?access_token={token}")
,但没有成功!

请将您的见解发送给我!谢谢!

c# firebase rest firebase-realtime-database firebase-authentication
2个回答
0
投票

使用 ID 令牌进行身份验证的文档中所示,您需要在 URL 中的

auth
参数中传递该令牌。

Authorization
标头和
access_token
参数仅用于使用OAuth2访问令牌进行身份验证


0
投票

如果我删除数据库规则,写入操作可以正常工作。如果我离开数据库规则,我会收到“未经授权”消息。

SDK 在可能具有完全读/写访问权限的服务帐户下运行。使用 API 时,请确保您的

currentUser
与您尝试写入的路径/文档的 Firestore 规则中的
allow update
和/或
allow create
规则匹配。

https://firebase.google.com/docs/firestore/security/get-started

© www.soinside.com 2019 - 2024. All rights reserved.