Oauth 2.0 for Fusion Tables API in .NET



为了自动更新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",
            });

相关内容

  • 没有找到相关文章