【问题标题】:Flutter: Generate access token from Google service accountFlutter:从 Google 服务帐户生成访问令牌
【发布时间】:2020-12-26 12:41:50
【问题描述】:

我正在尝试通过访问受限的 REST API 访问我的 Firbase 实时数据库。在 python 中,我会从服务帐户文件 google-services.json 生成访问令牌。像这样:

cred = credentials.Certificate("/PATH_TO_google-service.json")
token = cred.get_access_token().access_token

然后使用此令牌与 Firebase DB REST API 进行通信。

我在 Flutter(或 Dart 库)中找不到库或方法。我查看了googleapis_auth 并使用了ServiceAccountCredentials.fromJson({...}),但找不到获取访问令牌的方法。

如何获取访问令牌?有专门的库吗?

【问题讨论】:

  • 您可以编写代码自己解析 JSON 并将结果用于您的 API 请求。我不相信有提供的库,因为 Flutter 旨在在客户端应用程序代码中运行,并且应用程序代码使用服务帐户凭据是一个巨大的安全问题。服务帐号应在安全的后端使用,因为它们有权访问 Google Cloud 项目。客户端应用应使用 Firebase 身份验证来登录最终用户并授予用户级访问权限。

标签: firebase flutter dart access-token service-accounts


【解决方案1】:

在客户端获取访问令牌相对容易,但需要对客户端进行身份验证(登录)。用户登录 Flutter 应用后,您应该可以通过查看 auth 来检索 accessToken:

FirebaseAuth.instance
  .idTokenChanges()
  .listen((String token) {
    if (token == null) {
      print('User is currently signed out!');
    } else {
      print('User is signed in!');
    }
  });

More details here.

然后您可以使用 firebase admin sdk 验证服务器上的 idToken。

您不应该在客户端(网站、移动应用程序)中使用 serviceAccounts,原因是;他们提供对 firebase 资源的无限制访问,无论如何,firebase 客户端 sdk 使这变得非常困难。因此,最好只在您控制的受信任服务器上使用 serviceAccounts。

【讨论】:

    猜你喜欢
    • 2019-01-05
    • 2012-05-27
    • 2015-04-29
    • 1970-01-01
    • 2016-06-25
    • 2016-04-29
    • 2017-10-07
    • 1970-01-01
    • 2015-02-11
    相关资源
    最近更新 更多