2015-01-09 167 views
0

我遇到了一个问题,我可以在作为控制台应用程序运行时进行身份验证。但是,当我使它成为Windows服务并安装它时,我无法进行身份验证。我使用了日志调试语句来隔离问题。C#Google API身份验证

UserCredential credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
     new ClientSecrets { 
      ClientId = "myClientId", 
      ClientSecret = "myClientSecret" 
     }, 
     new[] { 
      CalendarService.Scope.Calendar 
     }, 
     "myProjectName", 
     CancellationToken.None, 
     new FileDataStore("myProjectName") 
).Result; 

问题出在上述说法。这被try/catch包围,但没有抛出异常。在此之后立即有一个日志语句,但它永远不会执行。我最好的猜测是问题出在FileDataStore上。默认情况下,Google存储的是%AppData%,当我手动运行它时,我的程序可以找到它,但是当它是Web服务时,我不得不给它一个类似本地系统或本地服务的帐户类型,我需要将其设置为用户I认为。我的猜测是,这可以防止它找到%AppData%中的文件。有没有人有任何建议如何帮助Windows服务找到%AppData%?或者在这种情况下Windows服务是一种糟糕的方法?

非常感谢您的帮助。

回答

1

使用此方法仅在您有UI时才有效,因为它将启动浏览器以请求验证。对于一项服务,您必须要求提供另一种暗示在服务器中安装证书的密钥。这在OAuth2ServiceAccount中有解释。