【问题标题】:YouTube Player API with Exposed GCP API keys带有公开 GCP API 密钥的 YouTube Player API
【发布时间】:2019-08-05 17:54:02
【问题描述】:

最近我在 Google Play 管理中心收到了这条提醒

您的应用包含公开的 Google Cloud Platform (GCP) API 密钥

我正在使用 YouTubeApi 播放器,我相信您可以初始化它的唯一原因就是使用这行代码

youTubePlayer.initialize(DEVELOPER_KEY, this);

那么除了对我的 API 密钥添加限制之外,还有其他方法可以从代码中删除 API 密钥吗?

我尝试使用 Google 建议的 GCP 服务帐户,但我不明白如何在没有初始化代码行的情况下仍然使用 YouTube 播放器。

【问题讨论】:

    标签: google-cloud-platform android-youtube-api android-security


    【解决方案1】:

    我有同样的问题,并通过使用由 google_services.json 生成的字符串 R.string.google_api_key 解决了这个问题

    将您的代码更改为:

    youTubePlayer.initialize(getString(R.string.google_api_key), this);
    

    如何获取 google_services.json:

    【讨论】:

      【解决方案2】:

      Using API Keys 文档中有一些关于如何保护 API 密钥的提示。

      据说应该避免直接在代码中嵌入 API 密钥,这是您现在拥有它的方式,因此您会收到警告消息。

      按照该页面上的提示,您应该正确保护您的 API 密钥。一旦你这样做,警告就会消失。

      更新

      为避免在 cmets 中进行冗长的讨论,请允许我进一步详细说明以提供此更新。

      Google 提供了不同的身份验证方式,可根据您的需要为您提供更多选项来保护您的应用。这些警告是有用的提示,可让您的应用在投入生产或向公众公开时更加安全。因此,在您的情况下,最好使用不同的身份验证方式。

      API 密钥可用于服务器端。例如如果您使用 API 密钥从 App Engine 应用程序验证 3rd 方服务,您可以使用已有的密钥,因为密钥不可能暴露。 (避免在 JavaScript 中使用 API 密钥,因为在浏览器中检查页面也会暴露 API 密钥)

      在您的情况下,由于您正在开发 Android 应用和/或 iOS 应用,因此在代码中包含 API 密钥是危险的。因为,任何人都可以使用.apk.ipa 文件并找到访问它的方法。因此,对于开发 Android 应用程序和 iOS 应用程序,建议使用不同的身份验证方法。 YouTube 播放器 API 支持的另一种身份验证方法是使用 OAuth 2.0。有关更多信息,您可以查看Registering your application 文档。

      【讨论】:

      • 问题是YouTube播放器需要:youTubePlayer.initialize(DEVELOPER_KEY, this);
      • 我可以为我的 API 密钥添加限制,我一直在寻找一种方法来隐藏 API 密钥并仍然将其传递给 youTubePlayer 的init
      • 我明白了。好吧,YouTube 播放器 API 需要将 DEVELOPER_KEY 作为字符串存在,但不是像您当前所做的那样将其嵌入代码中,您可以 store them in environment variables or in files outside of your application's source tree. 正如我在上面共享的文档中所述。这意味着您可以将其作为加密字符串保存在应用程序代码之外的文件中。加载文件,解码然后使用。
      • 这就是我一直在寻找的,一个在外部存储密钥然后将其读入的示例。我之前阅读过您提供的文档,并提到使用GCP service account,但我相信这是行不通的,因为它希望 API 能够自动读取 YouTube API 无法读取的凭据。
      • 您在文档中引用的GCP service account 在 Google 服务中使用。例如如果您使用 Cloud SQL,则 Cloud SQL 服务帐号将出现在 IAM 角色中;如果您使用 Cloud Build,则 Cloud Build 服务帐号将出现在 IAM 角色中。因此,如果您想使用 Cloud Build 访问 Cloud SQL,您可以验证这些服务帐号以在 IAM 角色中相互访问,而不是使用 API 密钥。这就是它的意思。
      猜你喜欢
      • 1970-01-01
      • 2017-01-25
      • 2019-09-29
      • 2014-03-20
      • 2015-07-17
      • 2020-05-08
      • 2014-08-09
      • 1970-01-01
      • 2013-12-27
      相关资源
      最近更新 更多