【发布时间】:2012-11-19 19:48:56
【问题描述】:
简短的问题是这是否可能,如果可能,如何实现?
大纲
我有一个 .NET 应用程序,该应用程序当前使用服务帐户通过 Google Drive API 访问 Google Apps 域中的信息。这可以很好地使用google-api-dotnet-client library 和代码沿相同的行as shown in the samples here - 这是目前我正在做的一个非常好的基本示例。
我现在要做的是通过“新”google-api-dotnet-client 库扩展它以及 using those APIs provided,它使用较旧的“GData”库,如通过 较旧的 google-gdata library,特别是电子表格 API(可能还会有更多)。
问题
这就是困难所在。正如上面第一段中的第二个链接所证明的那样,以前的图书馆完全符合我的要求 - 以及我自己做的事实。 然而...虽然第二个库已更新为支持 OAuth 2.0 以及 OAuth 1.0 和其他较旧的身份验证技术,但据我从广泛的谷歌搜索和跟踪中得知,它并不支持and-error - 允许我需要的“代表我所有用户的服务帐户”操作。
我的问题是我是否遗漏了一些东西(可能是难以找到或没有记录的东西),这可以让我做我想做的事。如果做不到这一点,有什么办法可以强制这种行为并使这两个库并行运行?
理想的解决方案
理想情况下,我希望通过某种方式让Google.GData.Spreadsheets.SpreadsheetsService 实例能够利用我已经在使用的Google.Apis.Authentication.Auth2Authenticator<AssertionFlowClient> 实例......不知何故。这样的巫术是可能的吗?我错过了显而易见的事情吗?
如果做不到这一点,我很乐意在必要时以旧库可以处理的某种方式再次完成整个 OAuth2“断言流客户端”。
帮助?
其他想法
我已经考虑过——但暂时拒绝了——从头开始编写自己的库来实现这一点的选择。这有两个原因:
- gdata 库已经存在,并且由许多可能比我聪明的人开发。我没有那么自大,我相信我可以做得更好。
- 我不确定这些旧 API 是否支持/允许使用服务帐户的 OAuth2 方法。
我一直希望避免但可能不得不回退的另一种方法,具体取决于这里的答案,将使用 2-legged OAuth 1.0 作为其中的一部分。我不希望这样做,因为应用程序的某些部分依赖于一种旧的身份验证方法,而其他部分则以一种不错的新方法来做,这对我来说是错误的。还有更多的问题......
更新
我已经考虑了将 GDataRequestFactory 和 GDataRequest 子类化的可能性,因此我可以创建自己的请求工厂,并使用 Google.Apis.Authentication.Auth2Authenticator<AssertionFlowClient> 的实例(好吧,无论如何是 Google.Apis.Authentication.IAuthenticator 的实例),它可以介入验证请求就在它被调用之前。但是...... GDataRequest 的构造函数是内部的,这让我停止了。
看起来真的不是这样。
【问题讨论】:
标签: c# .net oauth-2.0 gdata-api google-spreadsheet-api