【问题标题】:Google OAuth2 in distributed, self-hosted packages complaining about redirect_uri分布式、自托管包中的 Google OAuth2 抱怨 redirect_uri
【发布时间】:2015-05-19 22:27:44
【问题描述】:

我已经接管了内容管理平台的 Google Analytics API 仪表板的开发工作,并升级了代码以使用 OAuth2,因为最近禁用了旧的 oauth。身份验证流程和后续 API 调用在我的 localhost 上都可以正常工作以进行开发。

问题是在尝试来自不同域的代码时。 Google 希望通过开发者控制台将 redirect_uri 列入白名单,如果不存在,则会抛出 Error: redirect_uri_mismatch

由于这是一个自托管(+ 开源)包,人们可以在自己的服务器上安装,我无法添加所有可能的@987654323 @ 开发者控制台中应用键的值。

经过大量谷歌搜索并试图理解文档后,我得到的印象是有两种可能的解决方案。

  1. 指示用户转到 Google 开发者控制台,并创建自己的应用程序密钥,然后通过分布式应用程序中的 OAuth2 流来提供代码访问Google Analytics 中的数据。

  2. 使用 urn:ietf:wg:oauth:2.0:oob 的 redirect_uri 值和 Installed App 密钥,指示人们在身份验证后将代码复制/粘贴回自托管应用程序。

这些都不是真正吸引人,因为它为用户增加了一堆复杂性(尽管选项 2 听起来大多可行)。还有其他选择,还是我只是忽略了一些简单的事情?

【问题讨论】:

    标签: oauth google-api google-oauth


    【解决方案1】:

    在这件事上你实际上别无选择。您必须选择 nr 1。当您声明这是一个仪表板和 Web 应用程序时,它让我相信这是某种脚本语言。这意味着客户端 ID 和客户端密码将显示给您的用户/客户。这违反了 Google 的服务条款。

    Changes to the Google APIs Terms of Service
    要求开发者 做出合理的努力来保证他们的私钥是私密的,而不是 将它们嵌入到开源项目中。

    您不得将您的客户端 ID 和客户端密码发布给您的用户,他们必须在那里创建自己的。这很好地解决了他们必须自己解决的重定向 URI 问题。

    延伸阅读Can I really not ship open source with Client ID?

    【讨论】:

    • 这很有趣。根据developers.google.com/identity/protocols/OAuth2#installed,虽然使用“已安装的应用程序”选项应该没问题? 该过程会产生一个客户端 ID,在某些情况下,还会产生一个客户端密码,您可以将其嵌入应用程序的源代码中。 (在这种情况下,客户端机密显然不被视为机密。)
    • 已安装的应用程序是已编译的应用程序。就像通过 .exe 文件使用 api 的 Windows 应用程序一样。没有人能够在已安装的应用程序中看到客户端 ID 和客户端密码。但我想我会反馈一些关于该页面未更新为当前服务条款的反馈。
    • 您可以阅读我给 Google 的电子邮件,主题是通过开源项目发布此内容,并回复为什么我们不允许这样做。 daimto.com/changes-to-the-google-apis-terms-of-service
    • 感谢 DaimTo 提供的信息,真的很有趣。在这种情况下,包实际上在分发之前被编译成一种特殊的格式(尽管可以说它比安卓应用程序更容易解包)。安装后,id 和 secret 在系统配置中可用,因此人们可以设置自己的值,同时对现有值进行混淆。我会将源代码中的值删除到本地构建配置中,因此它们也不在 VCS 中。
    • 听起来不错,只需将其从配置中删除并指导您的用户如何创建自己的。这很好地解决了您的重定向 URI 问题:)
    猜你喜欢
    • 1970-01-01
    • 2019-06-06
    • 1970-01-01
    • 1970-01-01
    • 2015-11-10
    • 2021-03-10
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    相关资源
    最近更新 更多