26

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

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

在此处输入图像描述

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

在此处输入图像描述

Google OAuth 2 文档中,指定:

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

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

我有一些问题:

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

2 回答 2

35

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

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

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

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

图片

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

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

于 2014-06-17T19:07:54.137 回答
6

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

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

Google docs中,明确提到验证码请求(第一个请求)的响应将被发送到重定向 URI。因此,如果您从端点 A 发出请求并将 rediredt 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 的余地。

于 2016-10-17T16:59:03.333 回答