【问题标题】:Distribution of application that relys on Google API InstalledAppFlow分发依赖于 Google API InstalledAppFlow 的应用程序
【发布时间】:2021-08-10 20:39:03
【问题描述】:

问题

如果 InstalledAppFlow 需要 client secret json 文件来执行 oauth2 授权,那么使用 Google API 的实际应用程序是如何分发的?

客户端机密 json 文件是否应该被视为应用程序的一部分并作为常量包含在内?


上下文

目前我正在学习如何使用 oauth2 通过 python 模块 google_auth_oauthlib 授权谷歌 API 访问。

而且我发现 Oauth2 授权过程本身需要客户端密码文件用于 InstalledAppFlow 授权方法,但我从未见过请求授权的应用程序要求提供客户端密码。

经过无数次搜索,我只能找到关于它的信息,来自google identity docs

该过程会生成一个客户端 ID,在某些情况下,还会生成一个客户端密码,您可以将其嵌入到应用程序的源代码中。 (在这种情况下,客户端机密显然不被视为机密。)

来自google cloud docs

将凭证文件保存到 client_secrets.json。此文件必须与您的应用一起分发。

这是否解释了我应该将客户端密码作为常量嵌入(包含)代码本身?

【问题讨论】:

    标签: google-api google-oauth


    【解决方案1】:

    客户端 ID 和客户端密码的问题在于它们需要保持安全。 Google 的 TOS 要求开发者保护他们的客户 ID 并保密

    要求开发人员做出合理的努力来保护他们的私钥,而不是将它们嵌入到开源项目中。

    这可能会导致例如开源应用程序出现问题。 Can I really not ship open source with Client ID?

    这些年来,我与 google 的 Oauth2 团队进行了几次对话。无论如何编译的已安装应用程序可以在内部编译客户端 ID 和客户端密码,但这不会阻止任何人反编译应用程序并检索客户端 ID 和客户端密码。

    我被告知他们已经意识到了这个问题,并且真的没有办法解决它。

    我看到了其他选项,其中客户端 ID 和客户端密码将存储在服务器上,然后安装的应用程序将从 Web api 请求它们。这是另一种选择,但您是通过 HTTPS 发送它们,即使您对它们进行双重加密,它也应该被认为是安全的。

    事实上,没有办法解决它。主要的是,您不应该发布带​​有例如设置文件的应用程序,其中客户端 id 和客户端密码以明文形式显示,这将使 IMO 面临很大的风险,您需要将其编译到您的应用程序中,或者至少编译到您的应用程序中以某种方式对其进行加密。

    你不会阻止真正想要得到它的人得到它,但你会阻止大多数人。

    为什么安装的应用是问题。

    有多种类型的应用程序。移动、网络、已安装。

    对于移动设备和网络,可以通过多种方式配置客户端,这样您就可以确保它们仅在您的服务器上工作。对于 Web,您有一个重定向 uri,对于移动设备,您有实际的移动 api id。

    对于已安装的应用程序,这是不可能的,因为它们大多在 localhost 上运行。您无法知道应用程序在哪里运行,因此它们处于打开状态。因此,如果有人掌握了您的客户端 ID 和客户端密码,那么他们可以将其用于他们的应用程序。用户无法知道它不是您的官方应用,Google 也不会。

    既然你有一个 python 脚本,为什么不考虑指导你的用户创建他们自己的客户端 ID 和客户端密码,那么他们将是独立的。

    【讨论】:

    • 考虑到我是 python 编码器,它只是纯文本,想知道像 streamlabs OBS 这样的应用程序如何处理它......如果我在接下来的 7 天内没有看到其他答案,我会接受这个作为答案。跨度>
    • 您不能以纯文本形式发布它,您必须以其他方式进行操作。以某种方式对其进行加密。
    • Google cloud docs 发现了新的矛盾信息,说客户端密码必须与应用程序捆绑在一起。会不会是谷歌开发者内部没有足够的对话?
    • 是的,它必须与应用程序捆绑在一起,但您了解,如果 soeone 拥有您的客户端 ID 并且您的客户端为已安装的客户端秘密,则该客户端本质上无法锁定重定向 Uri / ip 地址.任何人都可以使用它来创建自己的应用程序来模仿您的应用程序,并且用户将无法知道它不是您。如果您的应用随后被 google 禁止,那么 google 将无法再次知道它不是您的应用。
    • 多年来我为客户编写了多个安装的应用程序,对此没有真正好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2017-11-06
    • 2019-03-11
    • 1970-01-01
    • 2015-06-20
    • 2017-02-11
    • 2015-02-03
    • 1970-01-01
    • 2019-06-02
    相关资源
    最近更新 更多