如何设置Google Drive Client ID以便在没有本地服务器的情况下进行访问?

时间:2015-01-21 21:21:33

标签: javascript google-drive-api

我想知道是否可以在随机计算机上打开jsfiddle并登录并验证并使用驱动器API,而无需一直运行本地服务器?一个人如何设置它?我很抱歉,如果这是一个简单的问题,但我只是因为我到目前为止发现的说明不清楚而丢失了。

编辑:

到目前为止,我有herehere

  1. 通过Google Developers Console
  2. 创建了一个项目
  3. 在那里打开那个项目,导航到API和API下的API。 auth,并确保已启用Drive API
  4. 进入凭据,点击“创建新的客户端ID”
    • 选择“网络应用程序”
    • 将授权的javascript来源设置为http://localhost:4567
    • 删除重定向URI中的所有内容并将其留空,然后按“创建客户端ID”。
  5. 获取thisthisthis等样本,并将其存储在名为index.html的本地文件中。
    • 这不会只是在浏览器中打开,所以我必须托管本地服务器
    • 我在命令行中导航到该目录,然后键入“python -m SimpleHTTPServer 4567”(不带引号)并且托管了本地服务器
    • 在我的网络浏览器中打开http://localhost:4567,所有这些示例都可以正常工作,将新创建的客户端ID复制到他们要求的文件中。
  6. 我还制作了一个python应用程序,使用pydrive I:

    1. 点击“创建新客户端ID”,然后点击“已安装的应用程序”和“其他”,然后点击“创建客户端ID”。
    2. 接下来,我转到Old Google APIs Console,点击了API Access,找到了客户端ID,然后点击了下载JSON。
    3. 我将此client_secrets.json放在我的python应用程序旁边,这使得pydrive成功进行身份验证,我可以使用该客户端ID访问和修改我的google驱动器文件。虽然我在将应用程序提供给另一个人之前删除了这个client_secrets.json,并向他们展示了如何执行此过程。
    4. 然而,除此之外,我有点不确定,特别是:

      • 如何在Web应用程序中使用驱动器api而无需设置本地服务器,例如只需在jsfiddle中运行代码并通过使用客户端ID通过我的项目发送请求,
      • 如果设置的本地服务器可以被网络上的任何人访问,那么如何修改上述步骤以允许任何客户端打开该服务器的网页以使用google drive API?

      我知道我很可能需要在开发人员控制台中设置公共API访问权限,但我不完全确定我应该使用哪些Referers。那么有没有一种简单的方法可以做到这一点?

      我也知道gspread只能使用客户端的用户名和密码打开google excell电子表格,所以我怀疑我正在寻找的是可能的,但我不确定。

2 个答案:

答案 0 :(得分:5)

好的,所以我找到了一个效果很好的解决方案:

  1. 创建一个OAuth.io帐户(免费)。
  2. 登录后,请转到您的oauth.io dashboard
  3. 您应该查看默认应用程序,或者您可以创建另一个并不重要的应用程序。
  4. 在“域名和网址列入白名单”下,您会看到一个显示“localhost”的小方框。输入 ” http://fiddle.jshell.net/“(不带引号)并按Enter键。这允许任何jsfiddle通过您的应用程序进行身份验证
  5. 接下来,我们需要启用Google云端硬盘支持
    • 转到Google Developers Console
    • 与以前一样,导航到API和Auth。
    • 下的Credentials
    • 点击“创建新客户ID”
    • 选择Web应用程序
    • 在“重定向URI”下,将“https://oauth.io/auth”和“http://oauth.io/auth”(不带引号,在不同的行中)
    • 在“Javascript Origins”下填写“https://oauth.io”和“http://oauth.io
    • 按“创建客户端ID”
  6. 现在转到Oauth.io key manager。点击左侧列表中的Google云端硬盘。按next,然后输入您在上一步中创建的client_id和client_secret(通过Google Developers Console)
    1. 在线选择(至少在线是首选,因为离线应仅限服务器端)
    2. 点击范围教科书,然后选择“https://www.googleapis.com/auth/drive(查看和管理您的Google云端硬盘中的文件)。”
    3. 按完成。现在点击Try Auth按钮,希望你得到一些像
    4. 这样的输出
  7. {
      "access_token": "ya29.AwH-1N_gnstLBuZfOR4W9CCcggKrQpMyKYV4QVEtCiIzHozNU5AfUJoYQzukALfjdiw2iOCUve7JbQ",
      "token_type": "Bearer",
      "expires_in": 3600,
      "provider": "google_drive"
    }
    

    要使用此功能,您可以执行以下操作:

    // This only works because we're set to "No wrap - in <head>"
    function ShowDriveFileList() {
        var accessToken;
        // Initialize OAuth with our key
        OAuth.initialize('lmGlb8BaftfF4Y5en_c8XYOSq2A');
    
       // Connect to google drive, and print out file list
        OAuth.popup('google_drive').done(function (result) {
        var xmlHttp = null;
            xmlHttp = new XMLHttpRequest();
            xmlHttp.open("GET", "https://www.googleapis.com/drive/v2/files", false);
            xmlHttp.setRequestHeader("Authorization", "Bearer " + result.access_token);
            xmlHttp.send(null);
            alert(xmlHttp.responseText);
        }).fail(function (err) {
            alert(err);
        });;
    }
    

    您可以在http://jsfiddle.net/JMTVz/41/找到。这使用我的oauth.io客户端ID,但您可以将其替换为您的,并且它也可以正常工作。

答案 1 :(得分:1)

您可以使用OAuth Playground执行相同的操作。

请参阅How do I authorise an app (web or installed) without user intervention? (canonical ?)

步骤11将有所不同。您可以使用与在答案中相同的方式将访问令牌粘贴到JS中,而不是将刷新令牌粘贴到您的服务器应用程序(您没有)中。