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

Posted

技术标签:

【中文标题】如何为 Google OAuth 2 添加多个重定向 URI?【英文标题】:How to add multiple redirect URIs for Google OAuth 2? 【发布时间】:2014-07-06 05:10:13 【问题描述】:

我正在尝试使用用于 Java 的 Social Auth 在我的计算机(localhost:8080)上运行的玩具应用程序使 Google OAuth 2 身份验证工作。

但是,当我的应用连接到 Google 以对用户进行身份验证时,Google 会使用以下错误页面进行响应:

我的应用名为“My Hobby App”,在开发者控制台中配置如下:

在Google OAuth 2 docs中指定:

redirect_uri:为此项目列出的 redirect_uri 值之一 在开发者控制台中。

确定响应的发送位置。这 此参数的值必须与列出的值之一完全匹配 在 Google Developers Console(包括 http 或 https 方案、大小写和尾随 '/')。

我有几个问题:

如何向我的应用添加多个redirect_uris? 为什么 Google 将我的应用标识为“项目默认服务帐户”而不是“我的爱好应用”?

【问题讨论】:

【参考方案1】:

这实际上比你想象的要容易,不幸的是,我花了几个小时才弄明白。

如何向我的应用添加多个 redirect_uris?

通常,当您在 Google 或其他地方添加多个链接时,您会用 ,; 将其分隔,但使用重定向 URI 您必须使用新行,这实际上不是很直观。因此,当您按下 Edit Settings 按钮时,如果您有更多链接,则可以添加到 URI 和/或 Origins,用换行符分隔 (enter)。

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

为什么 Google 将我的应用标识为“项目默认服务帐户”而不是“我的爱好应用”?

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

【讨论】:

谢谢,花了 20 分钟才搞定! 这应该被标记为答案。正在寻找多个重定向 uri。谢谢!!!来自我的 +1 只是想知道这个答案是否仍然有效。控制台可以选择添加多个 URI,但我没有看到我的第二个 URI 被识别。它只是每次都会抛出一个 URI 不匹配错误。 @Vikas 好久没试过了,可能google发现给大家带来了一些麻烦,改了输入法。如果它改变了,请告诉我们。 :-) @CMPSoares...好吧...我已经弄清楚我做错了什么。将作为答案发布。【参考方案2】:

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

我们在代码中的 2 个位置使用了重定向 URI。第一次是在获取授权码时,第二次是在用这个码交换访问令牌时。

在Google docs 中明确提到,验证码请求(第一次请求)的响应将被发送到重定向URI。因此,如果您从端点 A 发出请求并将重定向 URI 指定为端点 B,Google 会将身份验证代码发送到端点 B。这很清楚并且工作正常,没有任何错误。

对于第二个请求,文档有些模棱两可。 redirect_URI 参数说明如下:

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

这是我在理解它的工作原理时犯了一个错误的地方。按照与第一次调用类似的方法,我使用了第三个端点 C,并在进行第二次调用时在 redirect_URI 参数中传递了这个端点 C。尽管在 API 控制台中指定了端点 B 和 C,但出现 URI 不匹配错误。

问题在于,与第一次调用不同,对第二次调用的响应来自发出请求的同一端点。我在 python 中提出了如下请求:

r = requests.post(token_endpoint, params)

r 有带有令牌的响应。

我得到一个 URI 不匹配,因为我应该在两个调用中使用相同的 redirect_URI。

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

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

【讨论】:

非常感谢您消除了困惑。我为此苦苦挣扎了好几个小时,才弄清楚为什么第二个 uri 重定向不起作用。 不仅如此,在文档中,示例使用了两个不同的重定向 uri!非常令人困惑,感谢您发布此内容。 为什么单个应用程序的 API 控制台允许多个 redirect_URI? 我可以想象两个原因:(1)您可能是在不同的环境中进行测试(例如,在发展)。 (2) 您可以在不同的 URL 上提供相同的应用程序,并且不希望用户切换域。

以上是关于如何为 Google OAuth 2 添加多个重定向 URI?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 Android Google Analytics 添加页面标题参数

如何为具有多个帐户的用户在Google App Scripts中选择帐户?

Spring Security - OAuth2 和 CustomAuthenticationProvider。如何为每个配置不同的 URL 模式?

如何为uiview的不同部分添加多个UITapGestureRecognizer?

Angularjs - ng-map - Google Maps Javascript API v3 - 如何为多个标记设置最佳缩放

如何为您的网站添加 google chrome 多功能框搜索支持?