我应该如何在Google Picker和Google云端硬盘中使用刷新令牌?

时间:2017-09-01 14:11:58

标签: javascript oauth-2.0 google-drive-api google-oauth google-picker

问题:

我在google脚本的平台上有一个应用程序,这意味着允许在不使用任何帐户的情况下上传到Google云端硬盘。上传功能运行良好,但我遇到很长/大上传的问题。我现在试图解决这个问题一周,主要是因为我需要测试令牌的到期时间。

当用户尝试上传大文件(20/30 GB)服务器时,Auth令牌过期Error Screenshot 1,然后我收到此错误Error screenshot 2

所以我需要的是使用一个将在5个多小时内过期的令牌。我确实尝试使用刷新令牌,但我最后很困惑。我确实在OAuth 2.0 Playground中创建了刷新令牌。

我尝试过的事情:

  1. 在setOAuthToken中传递刷新令牌。 (被功能拒绝)
  2. 使用刷新令牌使用setOAuthToken但失败了。
  3. 问题

    1. 我是否可以永久授权应用访问Picker? (因为它始终是在服务器端代码访问驱动器的同一用户)?

    2. 我应该使用刷新令牌来获取身份验证令牌吗?

    3. 原始代码:

        var a = (new google.picker.PickerBuilder)
         .addView(t)
         .enableFeature(google.picker.Feature.NAV_HIDDEN)
         .setOAuthToken("<?= ScriptApp.getOAuthToken(); ?>")
         .enableFeature(google.picker.Feature.MULTISELECT_ENABLED)
         .hideTitleBar()
         .setSize(DIALOG_DIMENSIONS.width - 2, DIALOG_DIMENSIONS.height - 2)
         
         .setCallback(pickerCallback).setOrigin(config.FORM_EMBED_DOMAIN)
         .build()
         

      任何帮助都将非常感激。

4 个答案:

答案 0 :(得分:1)

afaik,Picker不能使用刷新令牌并使用它来更新其访问令牌。这几乎可以肯定是设计,因为刷新令牌永远不应该放在不安全的设备上,例如浏览器。

我建议的唯一方法是: -

A 1.在安全服务器上有刷新令牌

  1. 使用存储的刷新令牌
  2. 实现您自己的端点以返回访问令牌

    B 1.使用gapi,immediate = true(或者你当前获得访问令牌)

    1. 有一个setTimeout / setInterval函数,每隔59分钟,使用选项A或B获取一个新的访问令牌

    2. 通过查找存储访问令牌的内部属性将其戳入Picker对象。

    3. 这很脆弱,但我真的想不出更好的答案。

答案 1 :(得分:0)

建议的解决方案没有解决问题。

我尝试使用Google表单进行相同操作,我尝试上传用于测试原始问题中描述的错误的相同文件。事实证明,我有完全相同的错误!

所以,我认为是&#34;作为设计&#34;的一个案例。我已经向Google发送了错误报告,我们有一个G Suite帐户,希望我们收到一些反馈。但我认为这不容易解决。

谷歌表单替代方案的主要问题是它需要Gmail / Google帐户,如果您要上传的文件大于免费配额,则上传将失败。我尝试使用21 GB的个人帐户(上传者)和无限制的G Suite帐户(收件人和表单所有者)。

答案 2 :(得分:0)

所以,

经过大量测试不同的选项后,最简单/最快的解决方案是限制客户端上传最多3个文件(因为您可以在流程开始时上传3个文件)。当您尝试上传第4个文件时,您将收到身份验证错误。

案件结案!

答案 3 :(得分:-1)

您可以在 1 小时后处理创建的 picker 对象,并使用新获取的 access_token 创建一个新对象

https://developers.google.com/picker/docs/reference#picker

查看 API 描述中的方法 dispose