Google 日历:“客户端无权使用此方法检索访问令牌,或者客户端未获得任何请求范围的授权。”

时间:2021-01-04 07:49:48

标签: c# google-api google-calendar-api google-api-dotnet-client service-accounts

  1. 我们通过了验证,开始在 breess.com 服务上使用 calendar.events.readonly 范围。

  2. 我们创建了具有广泛授权的服务帐户

  3. 在 G Suite 域的管理控制台中添加了范围 https://www.googleapis.com/auth/calendar.events.readonly

  4. 用户帐户 xxxxx@xxx.com 授予其日历访问权限

一切看起来都配置好了。下面的代码在主机上执行并返回错误:

<块引用>

错误:“unauthorized_client”,描述:“客户端无权使用此方法检索访问令牌,或者客户端未获得任何请求范围的授权。”,Uri:“”

我们错过了什么吗?您能指导我们解决问题吗?

额外说明:

var credential = GoogleCredential
.FromFile("breess-7798c393d5b0.json")
.CreateScoped(new[] { CalendarService.Scope.CalendarEventsReadonly })
.createwithuser("xxx@xxx.xxx");
var calendarService = new CalendarService(new     BaseClientService.Initializer { HttpClientInitializer = credential, ApplicationName = "BREESS" });
var request = calendarService.Events.List(calendarId);
var events = await request.ExecuteAsync();

1 个答案:

答案 0 :(得分:0)

<块引用>

客户端无权使用此方法检索访问令牌,或者客户端未获得任何请求范围的授权。

谷歌授权Oauth的方式有3种。他们每个人都有自己类型的凭证文件和使用它们所需的代码。

  1. 已安装的应用程序
  2. 网络应用
  3. 服务帐号申请
  4. 仅用于公开访问的 API 密钥

在 Google 开发者控制台上创建项目时,您需要确保已创建服务帐户凭据。然后,您需要确保您使用的是用于服务帐户凭据的代码

var scopes = new[] { CalendarService.Scope.CalendarEventsReadonly }
GoogleCredential credential;
using (var stream = new FileStream(serviceAccountCredentialFilePath, FileMode.Open, FileAccess.Read))
                    {
                        credential = GoogleCredential.FromStream(stream)
                             .CreateScoped(scopes);
                    }
  credential.User = "domainuser@yourdomain.com";
 // Create the  Calendar service.
 return new CalendarService(new BaseClientService.Initializer()
         {
         HttpClientInitializer = credential,
         ApplicationName = "Calendar Service account Authentication Sample",
         }
  );

我没有发现您的代码有任何重大错误,所以我怀疑问题在于您没有正确类型的凭据文件。

相关问题