Ошибка просмотра событий в Календаре Google 401 Несанкционированный доступ к учетной записи службы - PullRequest
0 голосов
/ 27 февраля 2019

Я пытаюсь просмотреть несколько календарей для получения push-уведомлений о любых изменениях:

https://developers.google.com/calendar/v3/reference/events/watch

Я получаю сообщение об ошибке:

Запрос не выполненс кодом состояния 401

Я использую служебную учетную запись, к которой у меня есть доступ к каждому календарю.

Моя конфигурация:

{
  "type": "service_account",
  "project_id": "eventapi-219011",
  "private_key_id": "5ac83bf728fc9f3f635cec8096170573620dd388",
  "private_key": "xxx",
  "client_email": "googlecalendarservice@eventapi-219011.iam.gserviceaccount.com",
  "client_id": "111757078202416067272",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/googlecalendarservice%40eventapi-219011.iam.gserviceaccount.com"
}

У меня естьпроверил домен.Вот мой код, есть идеи, как я могу получить доступ?

let { google } = require("googleapis");

let privatekey = require("../config.json");
let axios = require("axios");

let ids = [];
let promises = [];

async function main() {

        const client = new google.auth.JWT(
            privatekey.client_email,
            null,
            privatekey.private_key,
            [
                "https://www.googleapis.com/auth/calendar",
                "https://www.googleapis.com/auth/calendar.readonly"
            ]
        );

        const token = await client.authorize();


        let config = {
            headers: {
                "Content-Type": "application/json;charset=UTF-8",
                Authorization: token.token_type + " " + token.access_token
            },
            type: "web_hook",
            address: "https:/rguc-calendars.firebaseapp.com/notifications"
        };

        axios
            .post(
                "https://www.googleapis.com/calendar/v3/calendars/rguc.co.uk_5hbugn8f7a4j3g7p6im1r1s1co@group.calendar.google.com/events/watch",
                config
            )
            .then(function(response) {
            //  console.log("latest" + response);
            })
            .catch(function(error) {
            console.log(error);
            })
}

main();

Я могу получить список календарей, используя:

const res = await client.request('https://www.googleapis.com/calendar/v3/users/me/calendarList');

Но не watch, вотмои учетные данные, которые я должен использовать?

API key 1
Oct 10, 2018
AIzaSyBkAEZGoQwB0f-Kmq4mCCzm93422up8oQw

OAuth 2.0 client IDs
Web client 1    
793554220141-91kh36o41rq2b337d1fcl50lvbqesl36.apps.googleusercontent.com

Service account keys
5ac83bf728fc9f3f635cec8096170573620dd388 GoogleCalendarService

1 Ответ

0 голосов
/ 27 февраля 2019

Чтобы сервисная учетная запись работала, она должна быть предварительно авторизована.Возьмите адрес электронной почты учетной записи службы и поделитесь календарем с учетной записью службы, как и для любого другого пользователя.

Это также даст вам доступ к push-уведомлениям для календаря.

Если это не такне работайте, убедитесь, что учетная запись службы была тем, кто создал первоначальный запрос наблюдения.

Для многих областей действия

календарь дает вам полный доступ к календарю пользователей тамнет никаких оснований запрашивать только чтение, просто используйте ту, которая вам нужна

https://www.googleapis.com/auth/calendar",
"https://www.googleapis.com/auth/calendar.readonly"

Сервисная учетная запись

Я не знал, что сервисная учетная запись будет работать с javascript, его удивительныму тебя это работает.

...