【问题标题】:Public Google Apps Script - how can I make my API key hidden but still retrieve it?公共 Google Apps 脚本 - 如何隐藏我的 API 密钥但仍能检索到它?
【发布时间】:2022-12-13 08:46:36
【问题描述】:

我有一个脚本可以检索 webhook(这意味着它必须部署为可公开访问的应用程序),然后使用 API 发送消息。
API 需要使用密钥和机密,我显然不希望公众访问这些内容。

Q1:有没有办法在另一个脚本中隐藏 API 密钥/秘密并以某种方式访问​​它?
(或任何其他类似的解决方案 - 不必花哨,只需功能/安全)。


备选问题:
Q2:在我公开的 Apps 脚本项目中,陌生人实际上能看到什么?完整代码?如果我在带有下划线的函数中隐藏键 IE。函数名_(){},他们能读懂吗?

重要信息:我没有与任何人“共享”项目或电子表格,它们仍然是私有的。但是我已经使用“任何人”的权限“部署”了 Web 应用程序。我假设这意味着任何人都可以访问?

【问题讨论】:

  • 我必须为我糟糕的英语水平道歉。不幸的是,我无法从I have a script that retrieves a webhook (meaning it has to be deployed as a publicly accessible App), and then uses an API to send a message.了解您的情况。可以问一下详细情况吗?
  • 不用担心:我的 Apps 脚本项目收到了一个 webhook 消息(“BUY”或“SELL”)并在金融交易 API 上使用它。 API 需要密钥和秘密 ('key="abcd"')。但是任何人都可以访问该项目以接收 webhook。我不想让他们看到我的密钥,所以我需要将它放在 Apps 脚本项目之外的某个地方,但仍然让项目能够读取它。我正在调查“PropertiesService”,但无法确定它的安全性。
  • 谢谢你的回复。关于My Apps Script project recieves a webhook message ("BUY" or "SELL") and uses that on an finance exchange API.,在您的情况下,您的 Google Apps 脚本使用带有 API 密钥和密码的 UrlFetchApp 从 API 检索数据。我的理解正确吗?
  • 而且,我无法理解But the project can be accessed by anyone to be able to recieve the webhook.的情况。如果您只想检索数据并且想让用户只显示数据,那么共享仅包含数据的电子表格怎么样?但是,我担心我可能无法正确理解您的情况。我为此道歉。
  • 为了更简单地解释它——让我们忘掉 webhook 和 API。假设我有一个应用程序脚本项目,它被部署为一个公共应用程序。我希望项目中的一个变量是我的姓氏(假设它是:var lastName = "SMITH"),但我不希望任何可以查看脚本(因为它是公开部署的)的人能够看到我的姓是“史密斯”。该信息需要在项目之外的某个地方保密,但仍可在脚本中使用。我想知道这是否可能。

标签: security google-apps-script google-sheets web-applications api-key


【解决方案1】:

脚本中的所有内容对任何有权访问的人(脚本所有者、工作区管理员、添加的用户)都是可见的。除非仅共享 webapp 的 url,并且如果脚本本身未共享,那么他们将无法访问该脚本,因此从技术上讲,您仍然可以将它们保留在您的脚本中。它在那里很安全,只有所有者和工作区管理员(如果它适用于 Google 工作区)才能访问它。

存储/保存密钥的一种方法是将其存储在脚本属性中。这样做你只需要运行一次脚本来存储 API 密钥,接下来你可以从脚本中删除 API 密钥并且它仍然会运行: https://developers.google.com/apps-script/guides/properties#saving_data

另请参阅此帖子以获取更多信息,在我发布的答案中,我还提供了替代方案和参考链接: Is it safe to put in secrets inside Google App Script code?

【讨论】:

  • 这听起来很有趣,我已经将密钥存储在脚本属性中并使用:var k = PropertiesService.getScriptProperties().getProperties() 来检索它。你是说我只需要得到它一次然后就可以删除那行吗?仅供参考,我还没有与任何人“共享”脚本 - 但我的理解是“部署”具有“任何人”的权限使其公开(我不想要),对吗?
  • @JackNapier 如果脚本本身没有共享,只有 Web 应用程序,那么他们将无法访问脚本,因此从技术上讲,您仍然可以将它们保留在脚本中。它在那里很安全,只有所有者和工作区管理员(如果它适用于 Google 工作区)才能访问它。
  • 哦太棒了谢谢你!这很有帮助。如果您想编辑有关它是私有的信息,我会接受您的回答吗?
  • @JackNapier 我实际上已经在第一段中说明了这一点 :) 但我会改写它以使其清楚。谢谢!
【解决方案2】:

我的项目也遇到了这个问题。因为函数量不是太多,所以我把我的主GAS藏在了一个dummy后面。 到目前为止我有 2 GAS

  1. 带密钥的主要 GAS,以及所有功能,我将其部署为 Web APP 因为你需要 doGet 或 doPost 作为 API 的入口
  2. 与用户共享的虚拟文件。

    然后你可以在虚拟 GAS 中调用类似下面的内容

        var url = 'https://script.google.com/macros/s/xxxxxxxxxxx/exec';
        UrlFetchApp.fetch(url,{'method': 'get'});
    

    我希望它对你有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-03
    • 2021-04-07
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 2012-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多