Google OAuth2在分布式、自托管包中抱怨重定向uri

Google OAuth2在分布式、自托管包中抱怨重定向uri,oauth,google-api,google-oauth,Oauth,Google Api,Google Oauth,我已经接管了内容管理平台的Google Analytics API仪表板的开发,并将代码升级为使用OAuth2,因为较旧的oauth最近被禁用。身份验证流和后续API调用在mylocalhost上都可以正常工作 问题是当从不同的域尝试代码时。谷歌希望重定向uri通过开发者控制台被列入白名单,如果它不在那里,它会抛出错误:重定向uri不匹配 由于这是一个自托管的(+开源)软件包,人们可以在自己的服务器上安装,因此我无法将所有可能的重定向uri值添加到开发者控制台的应用程序密钥中 在谷歌搜索了一番并

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

问题是当从不同的域尝试代码时。谷歌希望重定向uri通过开发者控制台被列入白名单,如果它不在那里,它会抛出
错误:重定向uri不匹配

由于这是一个自托管的(+开源)软件包,人们可以在自己的服务器上安装,因此我无法将所有可能的
重定向uri
值添加到开发者控制台的应用程序密钥中

在谷歌搜索了一番并试图理解这些文档之后,我觉得有两种可能的解决方案

  • 指示用户转到Google Developer控制台,创建自己的应用程序密钥,然后再通过分布式应用程序中的OAuth2流,提供对Google Analytics中数据的代码访问

  • 对已安装的应用程序密钥使用重定向uri值
    urn:ietf:wg:oauth:2.0:oob
    ,指示用户在验证后将代码复制/粘贴回自托管应用程序


  • 这两个选项都不是很吸引人,因为它为用户增加了很多复杂性(尽管选项2听起来基本上是可行的)。还有其他选择吗,还是我只是忽略了一些简单的事情

    在这件事上你实际上没有任何选择。你必须和NR1一起去。当你说这是一个仪表板和web应用程序时,我相信这是一种脚本语言。这意味着客户id和客户机密将显示给您的用户/客户。这违反了谷歌的服务条款


    要求开发人员 尽合理努力使其私钥保持私密性,而不是 将它们嵌入到开源项目中

    您不能将您的客户id和客户机密发布给您的用户,他们将不得不创建自己的客户id和客户机密。这很好地解决了你的重定向URI的问题,他们必须有自己的


    进一步阅读

    这很有趣。根据它应该是罚款,但与“安装的应用程序”选项?该过程会产生一个客户机ID,在某些情况下还会产生一个客户机机密,您可以将其嵌入到应用程序的源代码中。(在此上下文中,客户端机密显然不被视为机密。)已安装的应用程序是已编译的应用程序。例如,通过.exe文件使用api的windows应用程序。没有人能够在已安装的应用程序中看到客户机id和客户机机密。但是我想我会发一些反馈,说这个页面没有更新到当前的服务条款。你可以阅读我给谷歌的电子邮件,主题是发布这个开源项目,那里有关于为什么我们不允许这样做的回复。谢谢DaimTo提供的信息,真的很有趣。在这种情况下,软件包实际上是在发布之前编译成一种特殊格式的(尽管可以说,解包比android应用程序稍微容易一些)。安装后,id和secret在系统配置中可用,因此人们可以设置自己的id和secret,而现有的值会被混淆。我会将源代码中的值删除到本地构建配置中,这样它们也不会出现在VCS中。听起来不错,只需将其从配置中删除,并指导用户如何创建自己的值。这很好地解决了重定向URI问题:)