You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ASP.NET Core中使用Firebase自定义认证令牌查询Firestore?

调整步骤


1. 修正Firestore安全规则的声明路径

Firebase安全规则中,所有自定义声明默认挂载在request.auth.token对象下,而非直接挂载在request.auth上,原规则路径错误会导致鉴权失败。修正后的规则如下:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /myCollection/{documentId} {
        allow read: if request.auth.token.documentId == documentId
        allow write: if request.auth.token.documentId == documentId
    }
  }
}

2. 验证ID Token的声明有效性

将你请求时携带的token.IdToken复制到JWT解码工具中,确认Payload段存在documentId字段,且字段值和你要请求的文档ID完全一致。如果没有该字段,检查你交换自定义令牌的端点是否为Firebase官方的自定义令牌登录端点,同时检查CreateCustomTokenAsync传入的声明参数是否正确。

3. 修正Firestore请求的变量错误

你在GetPassenger方法中构造请求URL时使用了未定义的变量id,应该替换为方法入参passengerId,否则你请求的文档ID和令牌中携带的documentId不一致,必然触发权限不足。修正后的请求构造代码如下:

[HttpGet]
public async Task<IActionResult> GetPassenger(string passengerId)
{
    var token = await _authorizationClient.AuthorizePassenger(passengerId);

    using HttpClient client = new HttpClient();
    HttpRequestMessage message = new HttpRequestMessage(HttpMethod.Get,
        $"https://firestore.googleapis.com/v1/projects/{_firebaseAuthSettings.ProjectId}/databases/(default)/documents/myCollection/{passengerId}/?key={_firebaseAuthSettings.ApiKey}");

    message.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token.IdToken);

    var response = await client.SendAsync(message);

    if (!response.IsSuccessStatusCode)
    {
        return new StatusCodeResult((int) response.StatusCode);
    }

    var docs = await response.Content.ReadAsStringAsync();

    return Ok(docs);
}

4. 修正中间件初始化的笔误

你在Firebase中间件初始化代码中,ProjectId = setting.ProjectId存在变量名拼写错误,正确应为settings.ProjectId,否则FirebaseApp初始化失败可能导致后续生成的令牌存在隐含问题:

_ = FirebaseApp.Create(new AppOptions
{
    Credential = GoogleCredential.FromJson(settings.ServicePrinciaplJson),
    ServiceAccountId = settings.ServiceAccountId,
    ProjectId = settings.ProjectId
});

补充说明

Firebase API Playground默认使用你登录的Google Cloud账号凭证鉴权,若该账号拥有项目的编辑/所有者权限,会优先走IAM权限逻辑绕过安全规则,属于预期行为,不代表你的规则配置异常。

内容的提问来源于stack exchange,提问作者Phil DeVeau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 18:57:03