15

我有一个使用 google api(google drive)的网络应用程序。该应用程序被许多客户端使用,每个客户端都有一个子域来访问系统。

所以域是appdomain.com

对于用户,我有foo.appdomain.combar.appdomain.cometc.appdomain.com

但是在谷歌控制台重定向URI中,我必须手动放置重定向网址,有什么方法可以使用通配符重定向以使谷歌接受任何子域,例如: *.appdomain.com ?

有了这个,我可以使用redirect_uri中的用户子域进行谷歌授权调用:

https://accounts.google.com/o/oauth2/auth?redirect_uri=http://foo.appdomain.com
4

3 回答 3

17

Google OAuth 不支持通配符匹配子域。您可以尝试使用 state 参数并在其中包含用户特定的信息。该参数将在响应中返回给您。更多关于状态的信息在这里

于 2012-12-07T18:48:37.363 回答
8

您可以创建一个主子域来获取所有 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-10-12T18:01:33.807 回答
2

万岁有用但不必要的解决方法(感谢您让自己陷入困境谷歌)......

我使用 Google Drive 使用 javascript api 打开文件选择器,检索文件信息/url,然后使用 curl 将其下载到我的服务器。一旦我终于意识到我所有的通配符域都必须注册,我就中风了。

我现在做的是以下(这是我的用例,根据需要满足您的需求)

  1. https://googledrive.example.com/oauth/index.php?unique_token={some unique token}在您所在的页面上,创建一个 onclick 事件以在特定域 ( )中打开一个新窗口。

  2. 在新的弹出窗口中,我完成了所有的谷歌驱动器身份验证,点击了一个按钮,打开了文件选择器,然后至少从文件中检索了我需要的元数据。然后我将令牌(主键)、access_token、downloadurl 和文件名存储在我的数据库(MySQL)中。

  3. 回到第一步的页面,我创建了一个 setTimeout() 循环,该循环将使用相同的 unique_token 每秒运行一次 ajax 调用,以检查何时将其输入数据库。一旦找到它,我就终止循环,然后检索内容并按照我的意愿处理它们(在这种情况下,我通过一个单独的上传脚本上传它们,该脚本使用 curl 来获取文件)。

这显然不是处理这个问题的最佳方法,但它比将每个子域都输入谷歌云控制台要好。我敢打赌,您可能可以使用他们使用的谷歌服务器端 oauth 库来做到这一点,但我的用例有点复杂,而且我很暴躁,因为在过去 4 天里,我与谷歌进行了一次愚蠢的小集成,这让我很沮丧。

于 2013-10-04T22:08:40.670 回答