我遇到了一个问题,即在作为控制台应用程序运行时,我能够进行身份验证。 但是当我将其设为 Windows 服务并安装它时,我无法进行身份验证。 我已使用日志调试语句来隔离问题。
UserCredential credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
new ClientSecrets {
ClientId = "myClientId",
ClientSecret = "myClientSecret"
},
new[] {
CalendarService.Scope.Calendar
},
"myProjectName",
CancellationToken.None,
new FileDataStore("myProjectName")
).Result;
问题出在上述声明上。 这被 try/catch 包围,但没有引发异常。 紧随其后的是一条日志语句,但永远不会执行。 我最好的猜测是问题出在文件数据存储上。 默认情况下,Google存储的是%AppData%,当我手动运行时,我的程序可以找到它,但是当它是一个Web服务时,我被迫给它一个帐户类型,如本地系统或本地服务,我需要将其设置为我认为的用户。 我的猜测是这会阻止它在%AppData%中找到该文件。 有没有人对如何帮助Windows服务找到%AppData%有任何建议? 或者在这种情况下,Windows 服务是一种糟糕的方法?
提前感谢您的任何帮助。
仅当您有 UI 时才使用此方法有效,因为它将启动浏览器以请求身份验证。对于服务,您必须要求另一种密钥,这意味着在服务器中安装证书。它在OAuth2ServiceAccount中有解释。