【发布时间】:2016-09-23 12:18:13
【问题描述】:
我正在尝试在需要编辑功能的网页中使用公共 Google 日历。 为此,我创建了日历并将其公开。然后,我创建了一个 Google 服务帐户和相关的客户端 ID。 我还启用了日历 API 并将 v3 dll 添加到项目中。 我下载了 p12 证书,然后问题就开始了。
对 Google 的调用使用 X509 证书,但 .NET 框架的构建方式是它使用用户临时文件夹。 由于它是 Web 服务器 (GoDaddy) 的共享主机,因此我无法修改应用程序池标识。 结果,我收到了这个错误:
System.Security.Cryptography.CryptographicException:系统无法 找到指定的文件。
调用时:
X509Certificate2 certificate = new X509Certificate2(GoogleOAuth2CertificatePath,
"notasecret", X509KeyStorageFlags.Exportable);
然后将在 google 调用中使用该证书 var:
ServiceAccountCredential credential = new ServiceAccountCredential(
new ServiceAccountCredential.Initializer(GoogleOAuth2EmailAddress)
{
User = GoogleAccount,
Scopes = new[] { CalendarService.Scope.Calendar }
}.FromCertificate(certificate));
...但我从来没有走到那一步。
问题:有没有办法以不同的方式进行调用,即不使用 X509 证书而是使用 JSON? 或者我可以让 x509 函数使用一般临时位置,而不是我无法访问的用户位置,因为我无法更改应用程序池中的身份?
由于我完全陷入困境,因此将不胜感激。
【问题讨论】:
-
使用 JSON 肯定会遇到同样的问题 - 问题是“我无法加载文件”,而不是 Google 或 X509 特定的问题。您可以将证书嵌入到程序集中并使用
Assembly.GetManifestResourceStream加载数据... -
同意您将 GoogleOAuth2CertificatePath 放在哪里?
-
.p12 文件位于 App_Data/MyGoogleStorage 文件夹中。
-
.p12 文件位于 App_Data/MyGoogleStorage 文件夹中。我可以在直接输入地址时下载文件,所以这不是路径或凭据问题。我也同意问题不在于 Google 本身,因为在实际创建 x509 证书时,我在通话之前被卡住了。 @Jon Skeet:我喜欢你的想法……请问你有代码示例吗?
-
“直接输入地址就可以下载文件”到底是什么意思?它不应该被您的网络应用程序公开...
标签: c#-4.0 google-api google-calendar-api google-api-dotnet-client service-accounts