如何为Google OAuth 2添加多个重定向URI?

28

我正在尝试使用Java社交认证,让Google OAuth 2认证与我在计算机上运行的玩具应用程序(位于localhost:8080)配合使用。

然而,当我的应用程序连接到Google进行用户身份验证时,Google会响应此错误页面:

enter image description here

我的应用程序名为“我的兴趣爱好应用程序”,在开发者控制台中进行了以下配置:

enter image description here

Google OAuth 2文档中,指定了以下内容:

redirect_uri:开发者控制台上列出的重定向URI值之一。

决定响应发送到何处。此参数的值必须与Google开发人员控制台中列出的值完全匹配(包括http或https方案、大小写和尾部'/')。

我有几个问题:
  • 如何将多个redirect_uri添加到我的应用程序中?
  • 为什么Google将我的应用标识为“项目默认服务帐户”,而不是“我的爱好应用”?
2个回答

36

其实比你想象的要容易,但不幸的是,我花了几个小时才搞清楚。

如何将多个redirect_uris添加到我的应用程序中?

通常情况下,当您在Google或其他地方添加多个链接时,您会使用;进行分隔,但是对于Redirect URIs,您必须使用新行,这实际上并不直观。 因此,当您按下“编辑设置”按钮时,如果您有更多的链接,则可以通过换行符(enter)将其添加到URI和/或Origins中。

无需复杂的应用程序配置或新密钥。

image

为什么谷歌将我的应用标识为“Project Default Service Account”,而不是“My Hobby App”?

关于您的第二个问题:您必须进入“同意屏幕”选项卡来更改应用程序信息,例如您的PRODUCT NAMEHOMEPAGELOGO等。


1
谢谢,我花了20分钟才让它工作起来! - mwrf
1
这应该被标记为答案。我一直在寻找多个重定向URI。谢谢!我给你点赞。 - justin peterson
只是想知道这个答案是否仍然有效。控制台有添加多个URI的选项,但我没有看到我的第二个URI被识别。每次都会抛出URI不匹配的错误。 - Vikas
@Vikas 我已经有一段时间没有尝试过了,也许谷歌发现它给人们带来了一些麻烦并改变了输入方法。如果有更改,请告诉我们。 :-) - CMPSoares
@CMPSoares... 好的...我已经弄清了我的错误。会以答案的形式发布。 - Vikas

10

这个回答可能不是对问题的精确回答,但我认为这可能会帮助那些第一次使用Google OAuth并想知道为什么他们的多个URI没有被识别的人。

我们在代码中两次使用重定向URI。第一次是在获取授权码时,第二次是在交换此代码以获取访问令牌时。

Google文档中,明确提到授权代码请求(第一个请求)的响应将发送到重定向URI。因此,如果您从端点A发出请求,并将重定向URI指定为端点B,则Google将授权代码发送到端点B。这很清楚,在没有任何错误的情况下正常工作。

谈到第二个请求,文档有些模糊。redirect_URI参数描述如下:

redirect_uri:您在API Console中指定的URI,如设置重定向URI中所述。

这就是我在理解这个工作原理时犯了一个错误的地方。按照第一个调用类似的方法,我使用了第三个端点C,并在进行第二个调用时将其传递给了重定向URI参数。尽管我的端点B和C已在API控制台中指定,但我收到了URI不匹配错误。

问题在于,与第一个调用的情况不同,第二个调用的响应将发送到发出请求的同一端点。我像下面这样在Python中发出请求:

r = requests.post(token_endpoint, params)

r 是带有令牌的响应。

我因为URI不匹配而出现了问题,因为两个调用中应该使用相同的redirect_URI。

所以,对于单个OAuth请求,我们需要使用单个redirect_URI。

但是,这就引出了一个问题,为什么在单个应用程序的API控制台中允许使用多个redirect_URI。我认为,如果我们需要在同一个应用程序中进行多个authCode-token调用对,则可以使用多个redirect_URI。


1
非常感谢您澄清了我的疑惑。我为此苦苦挣扎了数小时,试图找出第二个URI重定向不起作用的原因。 - pratpor
1
不仅如此,在文档中,示例使用两个不同的重定向URI!非常令人困惑,感谢您发布这篇文章。 - Robin Clowers
2
为什么API控制台允许单个应用程序有多个重定向URI?我可以想象两个原因:(1)您可能正在从不同的环境中测试(例如在开发过程中)。 (2)您可能会在不同的URL上提供相同的应用程序,并且不希望用户切换域。 - Kariem
1
非常感谢。刚刚花了几个小时来解决这个问题。由于 API 控制台允许多个 URI,所以感到困惑。 - volf
这篇文章可能会挽救很多人的生命:)。为了做到这一点,我花费了数小时的时间。 - Rounak Jain
传递给令牌端点的redirect_uri似乎完全没有用处。当我从Google接收到代码并将请求发送到Google获取访问令牌时,它会直接响应。在我交换代码以获得令牌之前,我可以将用户重定向到任何我想要的URL。因此,我真的不明白为什么要将redirect_uri发送到令牌端点,因为Google只使用它来向我发送代码,在我调用该令牌端点时,它已经完成了。 - leisheng

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接