如何在 Android 应用程序中保护服务帐户凭据?

How to secure service account credentials in an Android application?

我有一个 android 应用程序,它与 Google 云 api 服务通信,例如语音转文本、翻译、NLP 等。该应用程序使用服务帐户来执行此操作,并且私钥文件存储在应用程序本身中。我知道这是一种不好的做法,因为任何人都可以使用 dissembler 看到它,但我不确定还有什么地方可以为 android 设备存储它。

以下 post 建议将此文件存储在构建服务器上:

https://brightinventions.pl/blog/securing-your-google-service-account-key-in-builds/

但是,我认为它不能解决问题,因为服务凭证文件已包含在发布包中。

如果您能想到解决方案,请告诉我。

不要在应用程序中嵌入服务帐户凭据。服务帐户凭据具有永久生命周期,这意味着您将被破坏。您可以删除服务帐户凭据,但之后您将不得不重新发布您的应用程序。

您有几个选择:

  1. 实施 Google OAuth,以便您的用户使用 Google 帐户进行身份验证。进行身份验证时,使用正确的 Google OAuth 范围来提供临时权限。
  2. 实施临时访问令牌。您的用户将连接到您的网站,进行身份验证,您的代码将为他们提供一个根据服务帐户凭据创建的临时访问令牌。此访问令牌将过期。默认值为 3600 秒,但您可以控制它。
  3. 您的用户将通过您的网站 API 提出所有请求。您控制用户的身份验证。然后,您的网站代码代表用户发出 API 请求。这不是一个理想的解决方案,因为所有流量都经过您的网站(Compute Engine、App Engine 等),您需要为该带宽付费。