Google 控制台重定向 URI 中的子域
Posted
技术标签:
【中文标题】Google 控制台重定向 URI 中的子域【英文标题】:Subdomain in Google Console Redirect URIs 【发布时间】:2012-11-19 01:52:04 【问题描述】:我有一个使用 google api(google drive)的网络应用程序。该应用程序被许多客户端使用,每个客户端都有一个子域来访问系统。
所以域是 appdomain.com
对于用户,我有 foo.appdomain.com、bar.appdomain.com、etc.appdomain.com。
但是在 google 控制台重定向 URI 中我必须手动放置重定向 url,有什么方法可以使用通配符重定向以使 google 接受任何子域,例如:*.appdomain.com?
有了这个我可以在redirect_uri中使用用户子域进行谷歌授权调用:
https://accounts.google.com/o/oauth2/auth?redirect_uri=http://foo.appdomain.com
【问题讨论】:
【参考方案1】:Google OAuth 不支持通配符匹配子域。您可以尝试使用 state 参数并在其中包含用户特定的信息。该参数将在响应中返回给您。 有关状态的更多信息here。
【讨论】:
@Lito 有一个使用状态参数建议的解决方法。 @vlatko 看起来该链接已失效,或者至少重定向到没有state
信息的另一个页面,而且我无法在任何地方找到它的详细记录。我已经看到了在 iframe 中加载 Google+ 登录按钮然后让 iframe 重新加载父页面的建议......似乎有点像一场噩梦。
出于安全原因不支持吗?【参考方案2】:
您可以创建一个主子域来获取所有 google 身份验证响应并使用“state”查询参数重定向到正确的子域。
例如,创建 google.mydomain.com 并将其用作您的有效“重定向 URI”,Apache 将可以将此 url 重定向到具有重定向(或重写)功能的每个用户。
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]
【讨论】:
在 nginx 方式下它不起作用。说一下“会话状态()与状态参数(xyz.domain.com)不匹配”【参考方案3】:万岁有用但不必要的解决方法(感谢 Google 让自己陷入困境)......
我使用 Google Drive 使用 javascript api 打开文件选择器,检索文件信息/url,然后使用 curl 将其下载到我的服务器。当我终于意识到我所有的通配符域都必须注册时,我几乎中风了。
我现在做的是以下(这是我的用例,根据需要满足您的需求)
在您所在的页面上,创建一个 onclick 事件以在特定域 (https://googledrive.example.com/oauth/index.php?unique_token=some unique token
) 中打开一个新窗口。
在新的弹出窗口中,我完成了所有的谷歌驱动器身份验证,点击了一个按钮,打开了文件选择器,然后至少从文件中检索了我需要的元数据。然后我将令牌(主键)、access_token、downloadurl 和文件名存储在我的数据库(mysql)中。
返回到第一个页面,我创建了一个 setTimeout() 循环,该循环将使用相同的 unique_token 每秒运行一次 ajax 调用,以检查何时将其输入数据库。一旦找到它,我就终止循环,然后检索内容并按照我的意愿处理它们(在这种情况下,我通过使用 curl 获取文件的单独上传脚本上传它们)。
这显然不是处理这个问题的最佳方法,但它比将每个子域都输入谷歌云控制台要好。我敢打赌,您可能可以使用他们使用的谷歌服务器端 oauth 库来做到这一点,但我的用例有点复杂,而且我很暴躁,因为在过去 4 天里,我与谷歌进行了一次愚蠢的小集成,这让我很沮丧。
【讨论】:
以上是关于Google 控制台重定向 URI 中的子域的主要内容,如果未能解决你的问题,请参考以下文章
Google OAuth 重定向 uri 只能是 127.0.0.1/authorize
Google Cloud Load Balancer - 子域重定向到存储桶中的特定文件夹
在谷歌开发者控制台下设置新的clientId时“授权的重定向URI”是强制性的吗?