我有一个使用谷歌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
答案 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将其下载到我的服务器。一旦我终于意识到我的所有通配域都必须注册,我就会中风。
我现在做的是以下内容(这是我的用例,根据需要为您提供服务)
在您所在的页面上,创建一个onclick事件以在特定域(https://googledrive.example.com/oauth/index.php?unique_token={some unique token}
)中打开一个新窗口。
在新的弹出窗口中,我完成了所有的谷歌驱动器身份验证,点击了一个按钮打开了文件选择器,然后至少从文件中检索了我需要的元数据。然后我在我的数据库(MySQL)中存储了令牌(主键),access_token,downloadurl和文件名。
回到第一步,我创建了一个setTimeout()循环,它将每秒运行一次ajax调用,使用相同的unique_token来检查它何时被输入数据库。一旦找到它,我就会杀死循环,然后检索内容并按照我的意愿进行操作(在这种情况下,我通过使用curl获取文件的单独上传脚本上传它们)。
这显然不是处理此问题的最佳方法,但它比将每个子域名输入谷歌云控制台更好。我打赌你可以用他们使用的googles服务器端oauth库来做这件事,但是我的用例有点复杂而且我是胡思乱想因为我在过去的4天里感到很沮丧我花了与谷歌的愚蠢的小整合