Google calendar api 使用json凭据文件模拟

Google calendar api 使用json凭据文件模拟,google-calendar-api,Google Calendar Api,我已通过向Gsuite域的域范围授权设置了一个服务帐户。 我想将其中一个用户模拟为已创建事件的组织者 我的代码是: List<String> scopes = new ArrayList<>(); scopes.add(CalendarScopes.CALENDAR); scopes.add(CalendarScopes.CALENDAR_EVENTS);

我已通过向Gsuite域的域范围授权设置了一个服务帐户。 我想将其中一个用户模拟为已创建事件的组织者

我的代码是:

                List<String> scopes = new ArrayList<>();
                scopes.add(CalendarScopes.CALENDAR);
                scopes.add(CalendarScopes.CALENDAR_EVENTS);


                InputStream credentialsJSON = Service5.class.getClassLoader()
                        .getResourceAsStream("credentials.json");

                GoogleCredential gcFromJson = GoogleCredential.fromStream(credentialsJSON, HTTP_TRANSPORT, JSON_FACTORY).createScoped(scopes);

                GoogleCredential cred =  new GoogleCredential.Builder()
                        .setTransport(gcFromJson.getTransport())
                        .setJsonFactory(gcFromJson.getJsonFactory())
                        .setServiceAccountId(gcFromJson.getServiceAccountId())
                        .setServiceAccountUser("edt@company.tn")
                        .setServiceAccountPrivateKey(gcFromJson.getServiceAccountPrivateKey())
                        .setServiceAccountScopes(gcFromJson.getServiceAccountScopes())
                        .build();
                Calendar service = new Calendar.Builder(HTTP_TRANSPORT, JSON_FACTORY, cred).setApplicationName(APPLICATION_NAME).build();


                Event event = new Event().setSummary("Test");

                DateTime startDateTime = new DateTime("2020-04-27T09:00:00.000Z");
                EventDateTime start = new EventDateTime()
                                      .setDateTime(startDateTime)
                                      .setTimeZone("Africa/Tunis");
                event.setStart(start);

                DateTime endDateTime = new DateTime("2020-04-27T10:30:00.000Z");
                EventDateTime end = new EventDateTime()
                                    .setDateTime(endDateTime)
                                    .setTimeZone("Africa/Tunis");
                event.setEnd(end);

                List<EventAttendee> attendees = new ArrayList<EventAttendee>();
                EventAttendee ens = new EventAttendee().setEmail("user@company.tn");
                attendees.add(ens);
                event.setAttendees(attendees);

                String calendarId = "primary";
                event = service.events().insert(calendarId, event).execute();
List scopes=new ArrayList();
添加(CalendarScopes.CALENDAR);
添加(CalendarScopes.CALENDAR\u事件);
InputStream credentialsJSON=Service5.class.getClassLoader()
.getResourceAsStream(“credentials.json”);
GoogleCredential gcFromJson=GoogleCredential.fromStream(credentialsJSON,HTTP_传输,JSON_工厂).createScoped(范围);
GoogleCredential cred=新的GoogleCredential.Builder()
.setTransport(gcFromJson.getTransport())
.setJsonFactory(gcFromJson.getJsonFactory())
.setServiceAccountId(gcFromJson.getServiceAccountId())
.setServiceAccountUser(“edt@company.tn")
.setServiceAccountPrivateKey(gcFromJson.getServiceAccountPrivateKey())
.setServiceAccountScopes(gcFromJson.getServiceAccountScopes())
.build();
日历服务=new Calendar.Builder(HTTP_TRANSPORT,JSON_FACTORY,cred).setApplicationName(APPLICATION_NAME).build();
事件=新事件().setSummary(“测试”);
DateTime startDateTime=新日期时间(“2020-04-27T09:00:00.000Z”);
EventDateTime开始=新的EventDateTime()
.setDateTime(startDateTime)
.setTimeZone(“非洲/突尼斯”);
event.setStart(启动);
DateTime endDateTime=新日期时间(“2020-04-27T10:30:00.000Z”);
EventDateTime end=新的EventDateTime()
.setDateTime(endDateTime)
.setTimeZone(“非洲/突尼斯”);
event.setEnd(end);
列出与会者=新建ArrayList();
EventAttendee ens=新建EventAttendee()。设置电子邮件(“user@company.tn");
与会者。添加(ens);
事件。设置与会者(与会者);
字符串calendarId=“primary”;
event=service.events().insert(calendarId,event.execute();
但我有个例外:

编辑-1 我下载了由
CREATE KEY

我得到了一个例外:

线程“main”中出现异常 com.google.api.client.auth.oauth2.TokenResponseException:401 未经授权 com.google.api.client.auth.oauth2.TokenResponseException.from(TokenResponseException.java:105) 在 com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:287) 在 com.google.api.client.auth.oauth2.TokenRequest.execute(TokenRequest.java:307) 在 com.google.api.client.googleapis.auth.oauth2.GoogleCredential.executeRefreshToken(GoogleCredential.java:394) 在 com.google.api.client.auth.oauth2.Credential.refreshToken(Credential.java:493) 在 com.google.api.client.auth.oauth2.Credential.intercept(Credential.java:217) 在 com.google.api.client.http.HttpRequest.execute(HttpRequest.java:880) 在 com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419) 在 com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352) 在 com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469) 位于tn.esprit.spring.google.calendar.Service5.main(Service5.java:183)

你能告诉我我错过了什么吗

非常感谢要使用服务帐户,您需要创建专用服务帐户凭据
  • 去医院
  • 选择一个项目
  • 继续
    api和服务
    ->
    凭证
  • 选择
    +创建凭据
    ->
    服务帐户
  • 选择一个
    服务帐户名
    ,然后单击
    创建
  • 如果需要,可以选择角色(可选)
  • 单击
    Create key
    并选择
    JSON
    (也可以使用第12页,但您需要以不同的方式构建
    GoogleCredential
  • 正确的json文件将下载到您的计算机上
它将如下所示:

{
"type": "service_account",
...

您使用的json文件不是服务帐户的正确文件,它没有指定
类型
字段-因此错误
'type'字段没有指定

您的
凭证的内容是什么。json
文件看起来像什么,您是如何获得它的?谢谢先生的回复。它看起来像
{“已安装:{”客户端id:“myClientId.apps.googleusercontent.com”,“项目id:“quickstart-1586641968471”,“身份验证uri:”https://accounts.google.com/o/oauth2/auth“,“令牌uri”:”https://oauth2.googleapis.com/token,“身份验证提供程序\u x509\u证书\u url”:https://www.googleapis.com/oauth2/v1/certs“,“客户端密码”:“myClientsecret”,“重定向URI”:[”urn:ietf:wg:oauth:2.0:oob“http://localhost“]}
。我是通过启用谷歌日历API获得它的。非常感谢先生的帮助,我有一个帐户服务,正如我的问题(编辑-1)所述,通过单击
创建键
按钮,我得到了带有
“type”的json文件:“service\u account”
,但现在我在线程“main”中遇到另一个异常com.google.api.client.auth.oauth2.TokenResponseException:401未经授权。请您查看我的问题的编辑部分。我是否遗漏了什么?非常感谢先生。您是否在管理控制台中为您的服务帐户提供了必要的范围?请参阅您应该继续
安全>api控件
第二节