Google控制台重定向URI中的子域

时间:2012-11-30 19:46:41

标签: google-api subdomain oauth-2.0 wildcard-subdomain google-authentication

我有一个使用谷歌API(谷歌驱动器)的网络应用程序。许多客户端都使用该应用程序,每个客户端都有一个子域来访问系统。

因此该域名为 appdomain.com

对于用户 foo.appdomain.com bar.appdomain.com etc.appdomain.com

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

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

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

3 个答案:

答案 0 :(得分:15)

Google OAuth不支持通配符匹配子域。您可以尝试使用state参数并在那里包含用户特定的信息。此参数将在响应中返回给您。 有关州here的更多信息。

答案 1 :(得分:7)

您可以使用“州”查询参数创建主子域以获取所有Google身份验证响应并重定向到更正子域。

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

有关http://www.simonecarletti.com/blog/2009/01/apache-query-string-redirects/

中的apache重定向的详细信息

这里是我正在使用的代码:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^google\.
RewriteCond %{QUERY_STRING} state=([a-z0-9]+)
RewriteRule ^(.*)$ http://%1.mydomain.com/$1 [L]

答案 2 :(得分:2)

万岁可以获得有用但不必要的解决方法(感谢您将自己复杂化为Google的一角)....

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

我现在做的是以下内容(这是我的用例,根据需要为您提供服务)

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

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

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

  4. 这显然不是处理此问题的最佳方法,但它比将每个子域名输入谷歌云控制台更好。我打赌你可以用他们使用的googles服务器端oauth库来做这件事,但是我的用例有点复杂而且我是胡思乱想因为我在过去的4天里感到很沮丧我花了与谷歌的愚蠢的小整合