google-api - Google Drive Access - 服务帐户或 OAuth - 读取/写入用户文件
问题描述
我有一个对文件执行操作的 .NET 控制台应用程序。我想允许客户让我们访问他们的 Google Drive 帐户,以便我们可以读取和写入文件。我们的控制台应用程序作为服务运行,因此用户无法与其交互并授权我们访问他们的 Google Drive 帐户。
我一直在考虑使用 Google 服务帐户进行应用程序级别的身份验证,直到我了解到服务帐户无权访问设置服务帐户的用户的 Google Drive 文件夹。这种方式违背了目的,因为它是我希望访问的客户的 Google Drive 帐户。
我看到 SO 成员@pinoyyid在这个 SO 答案中发布了一个解决方法,其中可以使用 Google 的 Oauth2 Playground 生成刷新令牌,但我担心刷新令牌可能会过期,并且需要再次用户干预才能生成另一个。
另一个回复提到解决方案是创建服务帐户,然后与服务帐户共享用户的 Google Drive 帐户。
谷歌推荐的方法是什么?如何最好地访问 Google Drive 帐户,同时只要求所有者进行一次身份验证,同时允许他们随时撤消访问权限?
解决方案
服务帐户和存储的 OAuth 刷新令牌都是可行的方法。每个都有其优点和缺点。
服务帐户将在您的用户只需要授予对他们可以共享给 SA 的特定文件夹的访问权限的情况下工作。请注意,SA 创建的任何文件都归 SA 所有,并使用 SA 的配额。您不能“将用户的云端硬盘帐户共享给 SA”,您只能共享单个文件夹。
存储 RT 是更宽松的选择。您不会使用我在您引用的答案中描述的 OAuth 操场,因为这对于要求用户进行操作来说太笨拙了。相反,您需要编写自己的注册/授权服务(您可以使用 AppEngine、Lambda 等 - 所以编写和托管并不难)。
推荐阅读
- apache-spark - 在pyspark中按日期过滤最近的行
- php - 如何在 Laravel 中限制跨度类项目列表
- security - 对openvpn使用16384位密钥长度是个好主意吗?
- android - -Djava.ext.dirs=[...]/Sdk/tools/lib:[...]/Sdk/tools/lib/x86_64 在linux上启动monkeyrunner时不支持
- apache-kafka - kafka消息“时间戳”代表什么?
- javascript - 尝试分页时 SetPage 不是函数错误
- sql-server - 限制对 MSSQL/AG 2016 上特定集群节点的访问
- flutter - 视频播放器出现错误 com.google.android.exoplayer2.ExoPlaybackException
- asp.net-core - Blazor 中的 Html.BeginForm
- python - Python函数从句子中提取一个单词