我接管了一个内容管理平台的Google Analytics API仪表板的开发,并升级了代码以使用OAuth2,因为旧的oauth最近被禁用了。身份验证流和随后的API调用都在我的localhost
上进行开发。
问题是在尝试来自不同域的代码时。Google希望redirect_uri通过开发者控制台被列入白名单,如果它不在那里,它会抛出Error: redirect_uri_mismatch
由于这是一个自托管(+ 开源)包,人们将能够在自己的服务器上安装,因此我无法将所有可能的redirect_uri
值添加到开发控制台的应用程序密钥中。
在谷歌上搜索并尝试理解文档之后,我得到的印象是有两种可能的解决方案。
-
指示用户进入Google Developer控制台,并创建自己的应用程序密钥,然后还通过分布式应用程序中的OAuth2流程提供对Google Analytics中数据的代码访问。
-
使用一个带有Installed App key的redirect_uri值
urn:ietf:wg:oauth:2.0:oob
,指示人们在认证后将代码复制/粘贴回自托管应用程序。
这两种方法都不太吸引人,因为它给用户增加了一堆复杂性(尽管选项2听起来大多可行)。还有其他选择吗,还是我忽略了一些简单的东西?
在这件事上你其实没有选择的余地。你必须和1号一起去。当你说这是一个仪表板和web应用程序时,它让我相信这是某种脚本语言。这意味着客户端id和客户端秘密将显示给您的用户/客户。这违反了谷歌的服务条款。
Google api服务条款的变更
要求开发者做一些合理的努力来保证他们的私钥是私有的在开源项目中嵌入它们。
你可能不释放你的客户端id和客户端秘密给你的用户,他们将不得不创建他们自己的。这很好地解决了你的重定向URI问题,他们必须自己解决。
进一步阅读我真的不能用客户端ID发布开源吗?