当前位置: 首页 > 知识库问答 >
问题:

谷歌。Net Service帐户访问日历

贝财
2023-03-14

我正在更新一个Web服务应用程序,该html" target="_blank">应用程序调用Google的日历API来列出特定日历的日历事件并插入新的日历事件。我正在尝试将其升级到api的版本3。对于身份验证,我使用我在Google Developers Console(https://console.developers.google.com)中创建的服务帐户凭据。我可以使用以下代码创建CalendarService:

using System;
using Google.Apis.Auth.OAuth2;
using System.Security.Cryptography.X509Certificates;
using Google.Apis.Services;
using Google.Apis.Calendar.v3;
using Google.Apis.Calendar.v3.Data;

...

        string SERVICE_ACCOUNT_EMAIL = 
         "....googleusercontent.com";
        string SERVICE_ACCOUNT_PKCS12_FILE_PATH = @"C:\temp\API Project-123456789.p12";

        // Create the service.

        X509Certificate2 certificate = new X509Certificate2(SERVICE_ACCOUNT_PKCS12_FILE_PATH, "notasecret", X509KeyStorageFlags.Exportable);

        ServiceAccountCredential credential = new ServiceAccountCredential(
                   new ServiceAccountCredential.Initializer(SERVICE_ACCOUNT_EMAIL)
                   {
                       Scopes = new[] { CalendarService.Scope.Calendar }
                      , User = "something@mycompany.com"

                   }.FromCertificate(certificate));

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

但是当我调用list方法查询公共日历时:

Events事件=service. Events. List("something@mycompany.com"). Execute();

引发TokenResponseException,并显示以下错误消息:

错误:"invalid_grant",描述:",Uri:"

仅供参考:我已进入我公司的AdminHome,并在安全管理客户端API访问下,将上面的SERVICE\u ACCOUNT\u电子邮件注册到http://www.google.com/calendar/feeds/.

在此方面的任何帮助都将不胜感激。

共有1个答案

谢高峯
2023-03-14

我相信你需要注册你的应用程序的服务帐户的客户端ID,我已经成功地使用此差异使其工作。

这是我通过插入事件解决的类似问题。使用Asp通过服务帐户插入Google API日历v3事件。Net MVC

这是关于域范围授权的谷歌文档。https://developers.google.com/ /domains/authentication/delegation

 类似资料:
  • 我在我的Angular 9 Web应用程序中使用谷歌日历API,并试图在我的谷歌办公套件域内的谷歌日历上创建事件 在G Suite管理控制台中,我为服务帐户授予了作用域的权限https://www.googleapis.com/auth/calendar和https://www.googleapis.com/auth/calendar.events 我在我的帐户下创建了日历本身,并添加了具有“更改

  • 我正在使用Google. net客户端库来访问谷歌日历应用编程接口。我需要研发创建日历事件并将其发布给用户的应用程序。 这是一个服务器到服务器的应用程序,所以我创建了一个服务帐户,并用它来发送邀请。当从web浏览器提交响应时,创建的与会者对这些事件的响应将被更新,但当来自outlook等任何邮件客户端的响应时,响应将以电子邮件的形式发送给服务帐户电子邮件id(这是一个虚拟电子邮件id)。如何将有效

  • 我想使用谷歌驱动器作为一个网站的准CMS工作,我正在使内容所有者可以编辑他们的内容使用谷歌驱动器。我希望使用一个可以访问Google Drive的特定用户帐户(在写这篇文章时,服务帐户不能直接访问Google Drive),并且能够与内容所有者共享文档。 在阅读了API和教程之后,我在委托中找到了答案:https://developers.google.com/drive/development

  • 我收到了这个错误 已经跟踪了https://developers.google.com/admin-sdk/directory/v1/guides/delegation 我使用这个库,并在laravel 5.7:https://github.com/spatie/laravel-google-calendar上运行它 有什么办法可以解决这个问题。请帮忙。

  • 我正在调查AWS/Google云基础架构系统是否可以混合,我的要求之一是从一个系统到另一个系统的安全和简单的身份验证。目前,我需要从一个Google Cloud VM实例连接到一个受限的AWS S3 bucket。 我的问题通常是:有没有办法做到这一点,什么是最好的方法。我相信每个人都希望有机会使用多个云提供商为他们的基础设施提供高安全性、易用性和维护性。 经过一些研究,我发现唯一可能的方法是通过

  • 假设我被授予访问其他用户日历的权限。我可以在Google calendar web UI的“其他日历”下成功地查看该日历。 该日历可以通过Caldav访问吗?如果是,怎么做? 我的CalDAV客户端开始查看https://apidata.googleusercontent.com/CalDAV/v2,并通过oauth2进行身份验证。它遵循当前用户主体URL,并从那里到日历主页集。在calendar