【发布时间】:2018-07-03 22:09:29
【问题描述】:
我正在寻找一种解决方案,帮助用户在切换帐户并点击webViewLink 或webContentLink 下载文件时绕过403 禁止。
我们将 Gdrive API V3(node) 与 Google 服务帐户一起使用。我们正在汇总文件,以便我们的团队轻松访问。服务器填充内容,然后用户通过链接访问它们。
所以问题是这样的:
- 用户登录
- 他们做他们的事,下载一些内容,没有问题,因为他们已登录到他们的工作帐户
- 用户去查看他们的个人电子邮件,或从云端硬盘中获取一些东西,因此他们切换了 Google 帐户
- 然后用户再次尝试访问内容(我们使用
webContentLink/webViewLink),他们得到了 403
这完全可以理解,Google 不知道尝试访问内容的是同一个人。
我想到的一些高级解决方案:
- 点击链接时,添加允许任何人查看的权限,并将其设置为在 n 秒内过期(使用 permissions.create 可能无法实现)
- 以某种方式保存正确的身份验证并在您单击链接时使用它(意识到我不确定浏览器如何知道要发送哪个令牌)
- 打开“任何知道链接的人都可以查看”(出于安全原因,这是有问题的,以防有人离开公司但仍然拥有链接或有人偶然发现它)
- 使用服务帐户凭据向客户端添加身份验证
- 直接在服务器上导出和下载这些文件(可能是 .key 和其他奇怪的格式?)
许多需要访问的文件是.key 和.mov 等,例如.ppt 和驱动器文件/文件夹。
这里有两个(ish)问题:
解决此问题的最佳方法是什么?是否可以使用 nodejs-client 库以编程方式下载所有这些文件类型?这是委派全域权限可以解决的问题吗?
是否可以指定客户端使用哪些凭据,即使服务器正在执行所有初始身份验证?
感谢您在此提供的任何帮助和见解!这真是一种痛苦!
【问题讨论】:
-
我不完全了解您的用例,但是,这个花絮可能会有所帮助。可以在 URL 中包含访问令牌 (?access_token=xxxxx)
-
考虑一个简单的 UI 来查看您的驱动器文件,以便团队可以轻松访问它们,而无需实际访问驱动器和四处寻找。我查看了返回的 auth 对象,我看到了一些指向令牌的链接,但实际上都没有给我一个。如果我使用服务帐户,该令牌驻留在哪里?谢谢@pinoyyid!
-
@pinoyyid 我现在意识到您是回答类似问题的人(请参阅答案),并想知道您在哪里找到此选项以强制使用“/a/corpdomain”进行身份验证。这是在某处记录的吗?这可能会改变的事实是否也记录在某处?
-
afaik 它没有记录。如果我通过单击 Gmail 中的 GDrive 图标说 GDrive,我通过观察生成的 URL 发现了它
-
@pinoyyid 非常感谢您的回复!你是救生员!最后一个问题:由于我使用的是服务帐户,我没有获得 access_token,有没有其他方法可以在请求中指定服务帐户应该获得完全访问权限(又名 403)?
标签: node.js google-api google-drive-api google-api-nodejs-client