当前位置: 首页 > 知识库问答 >
问题:

允许未经身份验证的客户端对Google驱动器文件进行读写访问

钱德元
2023-03-14

我们一直在开发一个web服务(http://www.genomespace.org/),它允许实现REST API的计算生物学工具读写存储在“云”上的文件。

我们的默认文件存储是通用Amazon S3 bucket,但现在允许用户挂载他们自己的私有S3 bucket以及Dropbox上的文件。

我们现在正试图为Google Drive启用类似的功能,但遇到了一些Google Drive特有的问题,这些问题是我们在S3Dropbox中没有遇到的。

>

  • 允许未经Google身份验证的客户端不引人注目地读取文件的唯一方法是使文件“公共”。我们的偏好是,一旦用户通过oauth2授权访问我们的应用程序,用户文件就可以在Google Drive中保持“私有”
    然而,即使用户已经授权我们的web服务离线访问他们的“私有”文件,我们还没有找到一种方法来生成一个URL,由系统授权的客户机可以使用该URL直接获取文件,而客户机也没有登录到Google。我们最接近此功能的是将文件权限更改为“任何有链接的人”,除了对于大于20MB的文件,Google坚持返回一个中间网页警告,该文件没有被扫描病毒。除了必须扰乱文件权限之外,这还会破坏我们现有的客户端。只有当文件“public”并且我们使用https://googledrive.com/host/parent_folder_id/filename形式的URL时,非Google客户端才能不受干扰地读取文件。

    没有找到任何方法让没有Google认证的客户端将文件上传到Google Drive。我们的API允许我们的授权客户机使用服务器提供的URL将文件直接放入备份文件存储区。但是,即使文件夹标记为public,客户端也需要Google身份验证凭据保存到Google Drive。我们可以通过系统中的中间跳来处理这两个问题(例如,我们的web服务器将首先从Google Drive下载文件,然后允许客户机获取它),但这将是非常低效的,希望是不必要的。这些问题以前在stackoverflow上已经讨论过多次(例如,这里和这里,并且已经非常仔细地阅读了响应,但没有看到任何最近的讨论。

    谷歌的人指示他们的API用户在stackoverflow上发布支持,所以我希望内部人士对此有新的看法。

  • 共有1个答案

    宋高寒
    2023-03-14

    一般的答案是:不要通过用户的浏览器发出驱动器请求。欧洲工商管理学院从你的服务器上做一切。您拥有用户的(刷新)令牌,所以您应该像在用户和驱动器之间建立代理一样发出所有请求。同样的下载,你下载它并返回给用户。只要您使用每个驱动器的令牌,就不会有费率限制/配额问题。

     类似资料:
    • 我不熟悉SSL和证书。我一直在做关于客户端证书认证的研究。我看过这个和wiki。 因此,如果我必须为我的B2B REST服务实现客户端证书身份验证解决方案,我应该执行以下操作 要求客户端生成自己的私钥,并为其公钥生成证书(CA 颁发?)。通过电子邮件或 USB 闪存盘发送该证书。 在服务器端将客户端的公共证书导入信任存储区并启用客户端身份验证 在握手期间,客户端会出示其证书并进行身份验证,因为服务

    • 授权服务器为进行客户端身份验证的目的,为Web应用客户端创建客户端凭据。授权服务器被鼓励考虑比客户端密码更强的客户端身份验证手段。Web应用程序客户端必须确保客户端密码和其他客户端凭据的机密性。 授权不得向本地应用程序或基于用户代理的应用客户端颁发客户端密码或其他客户端凭据用于客户端验证目的。授权服务器可以颁发客户端密码或其他凭据给专门的设备上特定安装的本地应用程序客户端。 当客户端身份验证不可用

    • 在向令牌端点发起请求时,机密客户端或其他被颁发客户端凭据的客户端必须如2.3节所述与授权服务器进行身份验证。客户端身份验证用于: 实施刷新令牌和授权码到它们被颁发给的客户端的绑定。当授权码在不安全通道上向重定向端点传输时,或者 当重定向URI没有被完全注册时,客户端身份验证是关键的。 通过禁用客户端或者改变其凭据从被入侵的客户端恢复,从而防止攻击者滥用被盗的刷新令牌。改变单套客户端凭据显然快于撤销

    • 如果客户端类型是机密的,客户端和授权服务器建立适合于授权服务器的安全性要求的客户端身份验证方法。授权服务器可以接受符合其安全要求的任何形式的客户端身份验证。 机密客户端通常颁发(或建立)一组客户端凭据用于与授权服务器进行身份验证(例如,密码、公/私钥对)。授权服务器可以与公共客户端建立客户端身份验证方法。然而,授权服务器不能依靠公共客户端身份验证达到识别客户端的目的。 客户端在每次请求中不能使用一

    • 有时需要对某些网络资源(如Servlet、JSP等)进行访问权限验证,也就是说,有访问权限的用户才能访问该网络资源。进行访问权限验证的方法很多,但通过HTTP响应消息头的WWW-Authenticate字段进行访问权限的验证应该是众多权限验证方法中比较简单的一个。 通过HTTP响应消息头的WWW-Authenticate字段可以使浏览器出现一个验证对话框,访问者需要在这个对话框中输入用户名和密码,

    • 我对Firebase实时数据库规则有意见。我向。在中,我想在实时数据库中添加我自己的用户对象。我这样做是因为每个用户都有额外的电子邮件/密码信息。 我检查完之后 方法 它叫。但出于某种原因,会抛出此数据库错误: 根据我的理解,如果Firebase用户不是null,那么他已经登录,因此我的规则在Firebase中声明 将允许用户写入数据库。但是,当我将规则更改为和。 所以我的问题是:我做错了什么?我