我现在的任务是设置谷歌授权来访问我组织的资源。
但是这个任务有一个问题。我的组织对其本地网络使用非标准域:domain.off。当我尝试在 Google 云控制台 (https://cloud.google.com/console) 中将"http://dev.domain.off:12345/auth/google/callback.html"设置为oauth2回调时,出现"无效的重定向 URI"错误。
我不能使用具有正确互联网域的直接地址,因为我组织的私有开发域中还有许多其他服务,我必须使用与不同地址的冲突。
我不能将带有直接地址的生产环境用于开发目的。开发环境只有私有地址,domain.off。
我无法修改孔开发环境以将所有私有开发地址更改为公共地址。这不是我负责的任务。
我的问题有什么解决方案吗?我现在看到的唯一解决方案是要求谷歌开发人员在oauth回调设置表单中删除或修改URI验证器以接受非标准域。
您可能希望使用替代的 Oauth 工作流之一。
如果您只想从您的服务中使用谷歌云,请按如下所述选择一个服务帐户: https://developers.google.com/console/help/new/#generatingoauth2 我在 teowaki.com 工作,用于与谷歌bigquery进行交互,并且可以无缝运行。您所需要的只是在云控制台上生成一个密钥并将密钥放在您的服务器上。
如果您需要识别用户,则可以为已安装的应用程序选择OAuth,如下所示 https://developers.google.com/console/help/new/#generatingoauth2
在这种情况下,您可以选择将用户转到一个 URL,在该 URL 中,他们将看到他们需要粘贴回应用程序的令牌,或者被重定向到 localhost 中的 URL。由于我假设您正在做一个 Web 应用程序,因此您应该选择第一个选项并向用户提供他们需要粘贴的令牌。它可能不是有史以来最好的用户体验,但作为一个内部应用程序,它可能是可行的。
因为您不能将直接地址与正确的互联网域一起使用
你可以尝试这样的事情
您可以创建一个主子域来获取所有谷歌身份验证响应,并使用"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]
您是否可能同意并重定向到您控制的某个地方的公共领域(使用 access_type = 离线)?
当Google回击身份验证代码时,不要从公共域使用它,使用http webhook或其他东西将其传递给具有约束的私人域,然后从私有域进行交换。然后,这允许您以不同的方式使用域和回调 url 来使用您想要的任何内容。请注意,使用 sdk 脚本设置的redirect_url也必须与您在控制台上设置的相同,与您实际调用交易所并完成令牌获取的服务器无关。
我不确定我是否缺少您的任何约束,但也许这会有所帮助。