【问题标题】:Google Drive SDK - client secret - how secret is it?Google Drive SDK - 客户端秘密 - 它有多秘密?
【发布时间】:2013-09-20 15:23:04
【问题描述】:

根据the Google Drive SDK documentation,您需要使用您的Google帐户注册您的自定义应用程序,以获得client-idclient-secret信息。然后,您可以使用这些为您的用户构建链接以获取访问/刷新令牌。

根据我读过的oAuth 上的一些介绍性指南,客户机密信息在某些情况下应保密,而在某些情况下则不保密。我正在用 Java 构建一个 Maven 插件,在这种情况下,您似乎很难将值保密。

是否可以将我的代码发布为开源代码,包括客户机密信息?或者这对我来说是否意味着潜在的风险?如果不行,我怎么能允许其他人使用插件而不泄露客户端秘密值?

【问题讨论】:

    标签: java maven oauth google-drive-api google-oauth


    【解决方案1】:

    OAuth 2.0 for Installed Applications 上查看 Google 的文档:

    Google OAuth 2.0 端点支持安装在设备(例如移动设备、Mac、PC)上的应用程序。这些应用程序被分发到各个机器上,并且假定这些应用程序不能保密。

    你应该没问题释放这个秘密。唯一的风险是某些流氓用户“烧毁”了您的所有配额。如果出现此问题,Per-user quotas 可能有助于缓解此问题。

    【讨论】:

      【解决方案2】:

      这取决于你要发布什么。如果您正在创建一个其他人将用来构建应用程序的库,那么不,他们应该为自己的应用程序注册并使用他们自己的客户端密码。

      如果你有一个正在发布的应用程序,并且因为你是一个好公民而想要发布源代码,我也会在发布的源代码中保留客户端机密;想要拥有自己的应用版本的人应该注册自己的客户端。

      当然,任何编译到移动应用程序中的东西都不再是秘密,因为移动设备无法保守秘密。

      【讨论】:

      • 第二种情况。您是否建议我在发布的源代码中省略秘密但将其包含在分布式 JAR 文件中?我担心人们会对 JAR 文件中的秘密进行逆向工程。不过,要求每个用户在 Google 注册自己的应用程序似乎也不正确。
      • 正如你所说,试图将它隐藏在 JAR 中是没有意义的,如果你要发布它,你不妨在源代码中发布它。我认为如果其他人构建自己的应用程序,他们应该注册自己的应用程序作为一般原则,这就是 OAuth 应该如何工作。
      【解决方案3】:

      在没有令牌的情况下发布代码,并说明使用您的代码的人如何获得自己的代码。 否则人们可能会滥用你的或复制它们用于其他项目。 否则,您可以销毁您的配额,并且如果它被复制到其他应用程序中,这些将在权限对话框弹出给用户时显示为您的(使用您的应用程序名称和徽标)

      【讨论】:

      • 对于问题的“如何发布代码”部分,这似乎是一个很好的建议,但是如何分发 JAR 文件(将其上传到 Maven 存储库)以便人们可以使用该插件?据我所知,他们可以打开 JAR 文件,对类进行逆向工程并读取秘密令牌。我该如何阻止他们这样做?
      • 您是否建议我应该要求普通用户(每个人)在 Google Drive 上注册他们自己的应用程序,并将 client-id 和 client-secret 值作为参数提供给插件?这似乎是一种安全但麻烦的方式。
      • 我以为你在服务器上保密。对于已安装的应用程序,oauth 流程是不同的,并且不使用机密。如果你必须使用它们,我怀疑任何人都会经历提取它们的麻烦,因为它可以免费创建你自己的(除非它是一个付费控制台项目,所以你可以获得更多配额)。我指的是人们在没有意识到的情况下从您发布的代码中复制/粘贴并将其用于自己的应用程序。
      猜你喜欢
      • 2021-09-24
      • 2021-03-07
      • 1970-01-01
      • 1970-01-01
      • 2020-12-11
      • 2015-03-29
      • 2023-01-20
      • 2018-03-27
      • 1970-01-01
      相关资源
      最近更新 更多