从Windows服务访问Google云端硬盘

时间:2012-09-08 16:04:40

标签: windows-services oauth-2.0 google-drive-api

我试图了解是否可以从传统的Windows服务访问Google云端硬盘,而不涉及用户。

按照https://developers.google.com/drive/quickstart上的指南,我已经能够创建一个命令行应用程序,将文件上传到Google云端硬盘。但是,此应用程序启动Web浏览器并将我重定向到Google的授权服务器页面,该页面为我提供了必须在命令行应用程序中输入的授权代码。显然,这对于作为Windows服务运行的应用程序不起作用,该服务将尝试在不同时间将文件上载到Google云端硬盘。在我的场景中,根本不可能让用户多次参与,而这将是在设置期间。

据我所知,授权码只在很短的时间内有效。如果我稍后尝试重用它,我会得到一个例外。

https://developers.google.com/accounts/docs/OAuth2处,有可能的身份验证方案的说明。符合我要做的唯一方案是“服务帐户”方案。这允许应用程序在不涉及用户的情况下访问Google服务。但是,根据同一页面,使用服务帐户的应用程序无法访问数据。

我认为Google不希望因旧式身份验证(用户名/密码)而烦恼,因为这可能会导致安全问题。从安全的角度来看,存储用户/传递配置当然不是很好。我错过了什么,或者我想做什么根本不支持?

1 个答案:

答案 0 :(得分:2)

快速入门应用程序是一个简化的命令行应用程序,它可以减少一些角落,以便更快地获得入门体验,但它仍然可以用作Windows服务的起点。

如果您不想启动浏览器,则必须删除对Process.Start(authUri.ToString())的呼叫,并可能将授权URL打印到控制台,以便用户可以复制该链接。

只需应用程序存储刷新令牌和交换访问代码时返回的访问令牌,您只需执行此手动步骤一次。访问令牌在一小时后过期,但刷新令牌永不过期(除非用户手动撤销对应用程序的访问),后者是用于请求新访问令牌的令牌。

该文档还包括一个完整的.NET应用程序,它显示了如何存储令牌以及如何处理各种授权边缘案例:https://developers.google.com/drive/examples/dotnet