【问题标题】:YouTube API Key Security - How worried should I be?YouTube API 密钥安全性 - 我应该有多担心?
【发布时间】:2015-02-18 19:04:24
【问题描述】:

我正准备启动一个使用 YouTube V3 API 的 Angular/Node Web 应用程序。该应用程序大约在 3 周前作为“测试版”发布,用于市场验证,并且在测试版中非常成功。这不会是商业上的成功,只是一个有趣的应用程序,让人们的生活更轻松一些。我有一个问题/疑虑,我应该隐藏我的 YouTube V3 API 密钥、客户端 ID 和范围吗?或者我可以假设由于只有我的域名被列入白名单,潜在的黑客/尝试使用 API 密钥的人将无法进行任何调用或造成任何损害,因此我无需担心?

这些是我担心的特定调用(不是真实的 ID/键)

Index.html 脚本标签

    var OAUTH2_CLIENT_ID ='_#H#RJHWEJFHEFUIEHFUHEFHEJFU.apps.googleusercontent.com';
    var OAUTH2_SCOPES = ['https://www.googleapis.com/auth/youtube'];

在 Angular 中,Controller.js

    .value('google_api_key', 'jfasdkjfdnstnewurweqjtndi')
    gapi.client.setApiKey(google_api_key);

【问题讨论】:

  • 这两个变量能不能不存为ENV变量,然后用在node.js部分? var OAUTH2_CLIENT_ID ='_#H#RJHWEJFHEFUIEHFUHEFHEJFU.apps.googleusercontent.com'; var OAUTH2_SCOPES = ['https://www.googleapis.com/auth/youtube'];'
  • 因为我实际上是在使用客户端流程而不是使用节点来验证 youtube api 的用户,如下面的回答,这是不可能的。

标签: javascript angularjs youtube api-key


【解决方案1】:

对于 Google API 的 Simple Access,API 密钥是请求所需的唯一凭据,它是您的应用/项目的唯一标识符。它提供 API 访问权限并受配额限制。

你应该保守秘密!

如果您有一个仅限客户端的应用程序(没有服务器),请使用OAuth 2.0 Client-side Flow

From Google's Documentation:

安全使用 API 密钥的最佳做法:

当您在应用程序中使用 API 密钥时,请注意确保它们的安全。公开暴露您的凭据可能会导致您的帐户遭到入侵,这可能会导致您的帐户产生意外费用。为确保您的 API 密钥安全,请遵循以下最佳做法:

  • 不要将 API 密钥直接嵌入代码中

    嵌入在代码中的 API 密钥可能会意外暴露给公众,例如,如果您忘记从共享的代码中删除密钥。不要将 API 密钥嵌入到应用程序中,而是将它们存储在环境变量中或应用程序源代码树之外的文件中。

  • 不要将 API 密钥存储在应用程序源代码树内的文件中

    如果您将 API 密钥存储在文件中,请将文件保存在应用程序的源代码树之外,以帮助确保您的密钥不会最终出现在源代码控制系统中。如果您使用 GitHub 等公共源代码管理系统,这一点尤其重要。

  • 将您的 API 密钥限制为仅由需要它们的 IP 地址、引荐来源网址和移动应用程序使用

    通过限制可以使用每个密钥的 IP 地址、引荐来源网址和移动应用程序,您可以减少泄露的 API 密钥的影响。您可以从 Google Developers Console 中指定可以使用每个密钥的主机和应用,方法是打开凭据页面,然后使用所需设置创建新的 API 密钥,或编辑 API 密钥的设置。

  • 删除不需要的 API 密钥

    为尽量减少您遭受攻击的风险,请删除您不再需要的所有 API 密钥。

  • 定期重新生成您的 API 密钥

    您可以从 Google Developers Console 重新生成 API 密钥,方法是打开凭据页面并单击为每个密钥重新生成密钥。然后,更新您的应用程序以使用新生成的密钥。在您生成替换密钥后,您的旧密钥将继续工作 24 小时。

  • 在公开发布之前检查您的代码

    在公开您的代码之前,请确保您的代码不包含 API 密钥或任何其他私人信息。

【讨论】:

  • 非常感谢您的回答。很有帮助。结果是 YouTube API,毕竟我不需要调用 gapi.setApiKey() 。离开我的网站让我感觉好多了。如果您不介意再回答一个问题,那么在使用客户端流程时,隐藏您的客户端 ID 是否重要?或者这根本不重要?
  • 不,client_id 不是秘密。事实上,对于客户端流程来说,没有什么是真正的秘密
猜你喜欢
  • 1970-01-01
  • 2019-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-24
  • 1970-01-01
相关资源
最近更新 更多