13

我现在的工作是设置谷歌授权来访问我组织的资源。

但是这个任务有一个问题。我的组织为其本地网络使用非标准域:domain.off。当我尝试在 Google Cloud Console ( https://cloud.google.com/console ) 中将“ http://dev.domain.off:12345/auth/google/callback.html ”设置为 oauth2 回调时,我得到“无效的重定向 URI”错误。

我不能使用具有正确 Internet 域的直接地址,因为在我的组织的私有开发域中有许多其他服务,我必须使用与不同地址的冲突。

我不能将具有直接地址的生产环境用于开发目的。开发环境只有私有地址 domain.off。

我无法修改漏洞开发环境以将所有私有开发地址更改为公共地址。这不是我能胜任的任务。

我的问题有什么解决办法吗?我现在看到的唯一解决方案是要求谷歌开发人员在 oauth 回调设置表单中删除或修改 URI 验证器以接受非标准域。

4

3 回答 3

3

您可能想要的是使用另一种 Oauth 工作流程。

如果您只想从您的服务中使用谷歌云,请按照此处的说明获取服务帐户:https ://developers.google.com/console/help/new/#generatingoauth2 我在 teowaki.com 有这个工作与 google bigquery 交互,它可以无缝运行。您只需要在云控制台上生成一个密钥并将该密钥放在您的服务器上。

如果您需要识别用户,那么您可以为已安装的应用程序进行 OAuth,如下所示https://developers.google.com/console/help/new/#generatingoauth2

在这种情况下,您可以在用户访问 URL 之间进行选择,在该 URL 中他们将获得一个令牌,他们需要将令牌粘贴回您的应用程序,或者重定向到 localhost 中的 URL。因为我假设你正在做一个 webapp,所以你应该选择第一个选项并向用户提供他们需要粘贴的令牌。它可能不是有史以来最好的 UX,但作为一个内部应用程序,它可能是可行的。

于 2013-11-26T13:31:40.723 回答
1

因为您不能使用正确的互联网域的直接地址

你可以试试这样的

您可以创建一个主子域来获取所有 google auth 响应并使用“state”查询参数重定向到正确的子域。

例如,创建 google.mydomain.com 并将其用作有效的“重定向 URI”,Apache 会将此 url 重定向到具有重定向(或重写)功能的每个用户。

有关 apache 重定向的更多信息, 请访问 http://www.simonecarletti.com/blog/2009/01/apache-query-string-redirects/

这里的代码:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^google\.
RewriteCond %{QUERY_STRING} state=([a-z0-9]+)
RewriteRule ^(.*)$ http://%1.mydomain.com/$1 [L]
于 2013-11-26T10:55:34.773 回答
1

您是否有可能同意并重定向到您控制的某个公共域(使用 access_type = 离线)?

当谷歌返回授权码时,不要从公共域使用它,用 http webhook 或其他东西将它传递给你有约束的私有域,然后从私有域进行交换。然后,这允许您以不同于您想要的任何方式使用域和回调 url。请注意,使用 sdk 脚本设置的 redirect_url 也必须与您在控制台上设置的相同,与您实际调用交换并完成令牌获取的服务器无关。

我不确定我是否遗漏了您的任何限制,但也许这会有所帮助。

于 2013-11-26T11:29:01.210 回答