为了自动更新Google Fusion Table,我们创建了一个. net控制台应用程序,并将文件clientsecrets附加到该应用程序中。从Google管理控制台生成并下载。
当我在本地运行应用程序时,将打开一个浏览器窗口,以授权使用OAuth 2.0的API。一旦授权,流程将正确执行。
然而,当我们在服务器上运行应用程序时,我们想要安排你的日常执行,不打开浏览器窗口并指出"一个或多个错误发生"。
服务器为Windows server 2012。该应用程序基于。net 4.5.1构建,代码授权如下:
...
var service = new FusiontablesService(new BaseClientService.Initializer
{
ApplicationName = "Fusion Tables Sample",
HttpClientInitializer = Utils.Google.GetCredential().Result
});
...
public static async Task<UserCredential> GetCredential()
{
using (var stream = new FileStream("client_secrets.json", FileMode.Open, FileAccess.Read))
{
return await GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
new[] { FusiontablesService.Scope.Fusiontables },
"XXXXXXXXXXXX[user]", CancellationToken.None);
}
}
似乎你需要一个服务帐户,可以从谷歌"IAM和Admin'控制台:https://console.cloud.google.com/iam-admin/serviceaccounts创建。创建服务帐户后,将其私钥保存在本地(最好是json文件),然后创建BaseClientService。初始化器从该文件获得的凭据。比如:
var scopes = new[] { FusiontablesService.Scope.Fusiontables };
using (var stream = new FileStream(keyFilePath, FileMode.Open, FileAccess.Read))
{
return GoogleCredential.FromStream(stream)
.CreateScoped(scopes);
}
有了这样的初始化器,只需创建FusiontablesService的实例,就像你做的那样:
service = new FusiontablesService(
new BaseClientService.Initializer()
{
HttpClientInitializer = creds,
ApplicationName = "Street Parking",
});