1

简而言之:我是否应该在我们的源代码中共享 oauth2-credentials 以及从专用的单一用途 google 帐户对 google 驱动器的完全写入访问权限?

所以,我编写了一个 python 脚本,它可以将一些数据保存到预先存在的 google-sheets 文件中,或者在给定的 google drive 文件夹中创建一个新的 google-sheets 文件(这两个文件都是可公开编辑的,以便在团队之间共享) .

为此,我遵循了google和其他来源概述的步骤和教程,之后我获得了 oauth2-credentials,以便我的脚本通过 google drive 和 google sheet API 进行身份验证。

这些凭据来自我为此脚本创建的单一用途的 google 帐户。

现在我想与其他团队成员分享这个脚本,但不确定如何处理凭证;任何一个:

一种。)

我将合并建议的 google 工作流程,让脚本的用户对他/她自己进行身份验证,即用户启动脚本,然后被定向到 google-authentication weblogin,对脚本进行身份验证,然后脚本将保存并使用那些用户用于将数据写入公共 google-sheets 文件(不一定是用户拥有的私有文件)的凭据。

这有以下缺点:

  • 用户将使用凭据信任我的脚本,这可以使其能够读取/写入用户驱动器帐户的所有数据。虽然我当然没有任何伤害的意思,但要求和负责似乎仍然太多了
  • 它打破了我脚本的预期直接工作流程。
  • 从技术上讲根本没有必要,因为脚本只能写入公共工作表文件/驱动器文件夹;那么为什么它需要对所有用户的驱动器文件进行写访问呢?

乙)

将我们的单一用途帐户的凭据硬编码到脚本中;唯一的缺点是当脚本的源代码将被共享时,任何人都可以获得这些凭据。但是这些凭据只会使攻击者能够将数据写入/读取帐户的 google 驱动器,但由于 oauth2 凭据范围的限制(我使用了“ https:// www.googleapis.com/auth/drive范围)。此外,如前所述,我们只会使用脚本将数据读/写到真实 google 帐户拥有的公共工作表文件中,因此我们永远不会使用单一用途帐户的驱动器,因此攻击者无法破坏我们的数据。

因此,我宁愿选择选项 B,但我无法摆脱硬编码公开可读凭证带来的焦虑......

你有什么建议?

4

1 回答 1

1

我们决定选择选项 A:用户需要自己创建 client_secret.json 和 credentials.json 文件。不幸的是,这不是最直接的,而是最安全的。无论细节如何,在公共回购中共享凭证都是一个很大的禁忌。

同样为了完整起见:另一种选择是让我们的应用程序在我们可以保存 client_secret 的服务器上运行,这样用户就会看到一个浏览器弹出窗口,他/她将在其中授权我们的服务。

但我们也不遵循该选项,因为脚本只包含核心逻辑,它应该是其他人开发的基础。

这就是我们做出这个决定的动机。

于 2018-06-12T10:40:12.113 回答