【问题标题】:Google OAuth WildCard DomainsGoogle OAuth 通配符域
【发布时间】:2013-09-15 16:42:17
【问题描述】:

我正在使用 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);
                                });
                            });




}
                });

【问题讨论】:

标签: javascript oauth google-oauth google-authentication


【解决方案1】:

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

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

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 如何使用状态参数?在上面的示例中,我有“ state: 'henry.example.com' ”,但似乎没有使用参数。
    • 状态参数不能这样工作,它的目的是验证您发送的内容
    猜你喜欢
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    • 2014-08-12
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    相关资源
    最近更新 更多