C#:Google.Apis.Auth.OAuth2.Responses.TokenResponseException:错误:" invalid_client",说明:"找不到OAuth客户端。",Uri:"& #34;

时间:2018-05-30 08:22:48

标签: asp.net google-api google-oauth2

我正在尝试将Google日历集成到我的网络应用程序中。我已成功集成Google日历,并能够从Visual Studio IIS Express服务器读取事件。但是当我在Web服务器上发布和上传我的应用程序时,我开始收到错误

  

Google.Apis.Auth.OAuth2.Responses.TokenResponseException:错误:" invalid_client",说明:"找不到OAuth客户端。",Uri:" "

我的代码

var certificate = new X509Certificate2(System.Web.HttpContext.Current.Server.MapPath("~/App_Data/key.p12"), "notasecret", X509KeyStorageFlags.Exportable);

        ServiceAccountCredential credential = new ServiceAccountCredential(
          new ServiceAccountCredential.Initializer(/*My Service Account */)
          {
              Scopes = new string[] { CalendarService.Scope.Calendar }
          }.FromCertificate(certificate));

        // Create Google Calendar API service.
        var service = new CalendarService(new BaseClientService.Initializer()
        {
            HttpClientInitializer = credential,
            ApplicationName = "Test",
        });

            EventsResource.ListRequest request = service.Events.List("primary");
            request.TimeMin = DateTime.Now;
            request.ShowDeleted = false;
            request.SingleEvents = true;
            request.MaxResults = 10;
            request.OrderBy = EventsResource.ListRequest.OrderByEnum.StartTime;

            // List events.
            Events events = request.Execute();

1 个答案:

答案 0 :(得分:0)

我通过使用.JSON密钥而不是.P12密钥来解决我的问题。

我从谷歌API控制台下载了新的.JSON密钥。然后改变一点代码。

GoogleCredential credential;
            using (var stream = new FileStream(System.Web.HttpContext.Current.Server.MapPath("~/App_Data/key.json"), FileMode.Open, FileAccess.Read))
            {
                credential = GoogleCredential.FromStream(stream)
                     .CreateScoped(new string[] { CalendarService.Scope.Calendar });
            }

    // Create Google Calendar API service.
    var service = new CalendarService(new BaseClientService.Initializer()
    {
        HttpClientInitializer = credential,
        ApplicationName = "Test",
    });

        EventsResource.ListRequest request = service.Events.List("primary");
        request.TimeMin = DateTime.Now;
        request.ShowDeleted = false;
        request.SingleEvents = true;
        request.MaxResults = 10;
        request.OrderBy = EventsResource.ListRequest.OrderByEnum.StartTime;

        // List events.
        Events events = request.Execute();

有关详细信息,请访问评论部分的链接。谢谢DaImTo。