共享 Google API 项目的客户端机密是否存在任何安全问题?

Jam*_*ang 9 oauth google-api google-oauth youtube-data-api

我正在使用 YouTube 数据 API 开展一个项目。我正在运行的 Python 脚本使用客户端机密 JSON 文件,我认为该文件用于验证帐户所有者。

如果我遇到问题并需要帮助,公开分享是否有任何安全问题?如果它私下保存在私人 github 存储库中,它甚至可以吗?

DaI*_*mTo 9

如果您查看您在Google Developer Console 上创建帐户时同意的Google Developer TOS

在此处输入图片说明

与任何人共享此文件是违反 TOS 的。这是秘密,仅适用于创建它的开发人员或开发人员团队。这与您从 Google 开发者控制台或 Google 云控制台下载的整个客户端机密 json 文件有关。

再次不要分享您的谷歌秘密文件。无论公认的答案是否存在问题,它可能有或可能没有问题,也不管它是什么类型的客户。共享客户端机密文件会破坏您同意的 TOS。

我对这个线程另一个答案更正这里

有问题的答案有一些我强烈不同意的陈述,并且认为可能会给开发人员造成混乱。首先让我说我不是谷歌的员工,我的评论是我自己的,根据我在谷歌 oauth/身份服务器服务器工作八年以上以及与谷歌身份团队联系的经验。我担心上面答案中的某些信息可能会使某些开发人员感到困惑。而不是只是说不要分享它们,另一个问题试图错误地 IMO 来解释为什么分享它们不会那么糟糕。我将解释为什么你应该永远分享他们超越的事实,其对谷歌的TOS值。

安全影响取决于客户端机密的类型。您可以通过 JSON 文件中的密钥是安装还是 web 来区分。

客户端的类型对我的安全风险有多大没有影响。如果我们完全忽略什么是构成安全风险的定义,而只是说任何人可以访问用户帐户或代表项目对用户进行身份验证的任何机会都会构成很大的安全风险,那么没有区别.

使用以下命令,我可以对自己进行身份验证,我需要的是您项目的凭据文件

https://accounts.google.com/o/oauth2/auth?client_id= {clientid}.apps.googleusercontent.com&redirect_uri=urn:ietf:wg:oauth:2.0:oob&scope= https://www.googleapis.com/ auth/analytics.readonly&response_type=code

对于已安装的应用程序,这只会在 100% 的时间内有效。如果我只是对自己的用户进行身份验证,为什么这会很糟糕。然后我可以使用我的邪恶力量向 API 发送如此多的请求,以至于目标 google 开发者项目将被谷歌锁定以发送垃圾邮件。

如果我窃取了其他用户的登录名和密码,我可以从您的 Google 开发人员项目登录他们,并且我可以访问他们的数据,而 Google 认为是您在窃取他们。

由于重定向 URI,这对于 Web 应用程序来说有点困难,但是许多开发人员在开发时将 localhost 添加为重定向 uri,而忘记将其取出(请不要在使用时将 localhost 作为重定向 uri )。因此,如果您在 Web 浏览器客户端中将重定向 URI 保留为有效的重定向 URI,那么我可以做完全相同的事情。

请记住,我现在可以根据您的项目对用户进行身份验证,以访问大部分我自己的数据。但是,如果您还设置了对客户端数据的访问权限,例如通过谷歌驱动器,我也可以访问它。(注意:我不确定这个我还没有真正尝试过。)

如果我通过中间人攻击或其他一些方法来获取用户刷新令牌,并且我有客户端机密文件,我现在可以访问用户数据,因为我可以使用刷新令牌创建新的访问令牌,只要我想。这可能有点难以实现。

Web 应用程序机密 如果客户端机密属于 Web 类型,那么是的:您绝对不应发布它,并且如果它被公开则使其无效。这将允许恶意实体冒充您的后端并代表您对用户帐户执行操作。

如上所述,只有当有问题的开发人员为本地主机打开重定向 uri,或者现在拥有您的客户端机密文件的人也可以访问您的 Web 服务器时,才会出现这种情况。一个非常重要的事实是,如果您将 localhost 保持打开状态,我就可以使用您的凭据建立自己的网站并进行设置,使其看起来与您的网站完全一样。用户然后认为他们正在登录您的超级棒的应用程序,而实际上他们正在登录 Hacker 超级棒的应用程序,使他们可以访问用户数据。谷歌再次认为你在攻击他们。

已安装的应用程序机密如果客户端机密是安装类型的机密,那么私下共享的问题就不大了,因为它不会授予 Web 应用程序机密所具有的各种能力,例如作为授予您的应用程序的用户进行身份验证的能力访问其数据的权限。正如文档所指出的,“在这种情况下,客户端机密显然不被视为机密。”

这是完全错误的 已安装的应用程序提供与 Web 应用程序完全相同的权限,对于 Oauth2 访问没有区别,访问令牌是访问令牌,无论它是为已安装的应用程序还是为 Web 应用程序创建的。

如上所述,授予对已安装应用程序的访问权限的安全风险实际上更糟。因为安装的应用程序没有重定向 uri。任何有权访问您的客户端机密文件的用户都可以验证那些假设他们是您的用户,因为他们正在看到您的同意屏幕。不仅您的 Google 开发者项目被劫持,而且您的用户认为他们正在对 Super Awesome 应用程序进行身份验证,实际上他们并没有授予窃取您凭据的人访问他们数据的权限。

我想补充最后一件事。如果您向其他人提供您的项目凭据。客户端机密 json 文件。您授予他们代表您拨打电话的权限。如果您设置了欺凌设置,可以说反对 google maps api。您需要为他们拨打的电话付费。

我希望这有助于澄清与接受的 anwser 相关的一些混淆。