Google OAuth WildCard域名

时间:2013-09-11 15:08:35

标签: javascript oauth google-oauth google-authentication

我正在使用google身份验证,但不断发现原因不匹配。我正在使用的项目具有由用户生成的子域。例如,可以有:

john.example.com
henry.example.com
larry.example.com

在我的应用设置中,我的一个起源是http://*.example.com,但我的原点不匹配。有办法解决这个问题吗?顺便说一句,我的代码如下:

 gapi.auth.authorize({
                        client_id : 'xxxxx.apps.googleusercontent.com',
                        scope : ['https://www.googleapis.com/auth/plus.me',
state: 'http://henry.example.com', 
'https://www.googleapis.com/auth/userinfo.email', 'https://www.googleapis.com/auth/userinfo.profile'],
                        immediate : false
                    }, function(result) {

                        if (result != null) {
                            gapi.client.load('oath2', 'v2', function() {
                                console.log(gapi.client);
                                gapi.client.oauth2.userinfo.get().execute(function(resp) {
                                    console.log(resp);
                                });
                            });




}
                });

2 个答案:

答案 0 :(得分:4)

万岁可以获得有用但不必要的解决方法(感谢您将自己复杂化为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云控制台更好。我打赌你可以用他们使用的googles服务器端oauth库来做这件事,但是我的用例有点复杂而且我是胡思乱想因为我在过去的4天里感到很沮丧,我花了与谷歌的一个愚蠢的小整合。 / p>

答案 1 :(得分:0)

不支持通配符源,重定向URI也是如此。

您可以注册通配符来源是一个错误。

你可以使用state参数,但要非常小心,确保你没有创建一个开放的重定向器(一个可以重定向到任意URL的端点)。