【问题标题】:Why do Firebase Database security rules not apply to an Authenticated REST API?为什么 Firebase 数据库安全规则不适用于经过身份验证的 REST API?
【发布时间】:2017-12-24 20:25:14
【问题描述】:

我正在使用 Firebase 数据库,并为测试设置了一条安全规则

".write":false

读取总是正确的。

现在,当我在 android 应用程序中使用客户端 SDK 编写任何内容时,数据库中的任何地方都按预期拒绝写入。

但是,当我使用经过身份验证的 REST API 补丁请求在任何地方写入任何内容时,它总是会成功。

令牌生成如下:

       //googleCredAhmedabad and scopedAhmedabad are GoogleCredential objects

       InputStream is = getServletContext().getResourceAsStream("/WEB-INF/firebaseauth/myserviceaccountfile.json");

        googleCredAhmedabad = GoogleCredential.fromStream(is);

        scopedAhmedabad = googleCredAhmedabad.createScoped(
                Arrays.asList(
                        "https://www.googleapis.com/auth/firebase.database",
                        "https://www.googleapis.com/auth/userinfo.email"
                        )
                );

        scopedAhmedabad.refreshToken();

        String myToken = scopedAhmedabad.getAccessToken();

是否(使用服务帐户生成具有足够范围的凭据)经过身份验证的 REST API 调用胜过安全规则?

【问题讨论】:

  • 也许安全规则只适用于他们的客户端(android和ios)和web端sdks

标签: android firebase firebase-realtime-database firebase-authentication


【解决方案1】:

Firebase Documentation上有提到:

auth 请求参数允许访问受 Firebase 保护的数据 实时数据库规则,所有请求类型都支持。这 参数可以是我们的 Firebase 应用程序机密或身份验证 令牌,我们将在用户授权部分介绍。

我看到您提到您正在使用经过身份验证的 REST API,所以我假设您确实设置了 auth 参数。这意味着您是对的:安全规则不适用于经过身份验证的 REST API。

【讨论】:

  • 是的,只是在没有身份验证令牌的情况下进行了测试,正如预测的那样不起作用。我猜使用服务帐户创建的默认凭据提供了完整的管理员权限,例如 adminsdk。与 adminsdk 不同,没有可能覆盖身份验证 :) 不知何故错过了文档中的那部分,谢谢 :)
猜你喜欢
  • 2019-06-15
  • 1970-01-01
  • 2018-05-04
  • 2020-06-23
  • 1970-01-01
  • 1970-01-01
  • 2019-01-20
  • 2020-06-11
  • 1970-01-01
相关资源
最近更新 更多