Планирование встреч с использованием Graph API

В моей организации Microsoft 365 есть несколько пользователей с соответствующими адресами электронной почты.

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

Каждый метод аутентификации, который я пытаюсь использовать ms graph api, приводит к ошибке, в которой говорится, что планирование календаря доступно только в делегированном режиме.

Не уверен, какой подход здесь правильный, мне нужен полностью программный способ управления календарями пользователей моей организации. Решение, требующее от пользователя аутентификации с использованием oauth2 (требует взаимодействия с пользователем), в этом случае не подходит.

Вот код, в настоящее время с проверкой подлинности сертификата.


const tenantId = '###';
const clientId = '###';
const certificatePath = 'file.pem';


const credential = new ClientCertificateCredential(
    tenantId,
    clientId,
    certificatePath,
);

// @microsoft/microsoft-graph-client/authProviders/azureTokenCredentials
const authProvider = new TokenCredentialAuthenticationProvider(credential, {
    scopes: ['https://graph.microsoft.com/.default'],
});

const graphClient = Client.initWithMiddleware({ authProvider: authProvider });
const event = {
    subject: 'Testing meeting scheduling',
    body: {
        contentType: 'HTML',
        content: 'Is it working?',
    },
    start: {
        dateTime: '2024-05-22T11:00:00',
        timeZone: 'Pacific Standard Time',
    },
    end: {
        dateTime: '2024-05-22T12:00:00',
        timeZone: 'Pacific Standard Time',
    },
    location: {
        displayName: 'Room 22',
    },
    attendees: [
        {
            emailAddress: {
                address: '[email protected]',
                name: 'User A',
            },
            type: 'required',
        },
        {
            emailAddress: {
                address: '[email protected]',
                name: 'User B',
            },
            type: 'required',
        },
    ],
    transactionId: '?',
};

const calendarId = '################';


console.info("Scheduling....")

graphClient.api(`/me/calendars/${calendarId}/events`).post(event)
  .then(response => {
      console.info('Event created successfully:', response);
  })
  .catch(error => {
      console.error('Error creating event:', error);
  });

Получение ошибки:

{
  "code": "BadRequest",
  "message": "/me request is only valid with delegated authentication flow.",
  "innerError": {
    "date": "2024-04-30T09:04:28",
    "request-id": "921c1689-14a7-4452-8870",
    "client-request-id": "2dd01605-5566-0f41"
  }
}

Вы не можете использовать конечную точку /me с потоком учетных данных клиента. Замените его на /users/userId/

Sridevi 30.04.2024 11:28
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
1
72
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ошибка обычно возникает, если вы вызываете конечную точку /me с токеном, сгенерированным потоком учетных данных клиента.

Я зарегистрировал одно приложение Entra ID и добавил Calendars.ReadWrite разрешение типа приложения, как показано ниже:

Когда я вызвал конечную точку /me с токеном, сгенерированным потоком учетных данных клиента, я тоже получил ту же ошибку, что и ниже:

const calendarId = '################';

console.info("Scheduling....")

graphClient.api(`/me/calendars/${calendarId}/events`).post(event)
  .then(response => {
      console.info('Event created successfully:', response);
  })
  .catch(error => {
      console.error('Error creating event:', error);
  });

Ответ:

Чтобы устранить эту ошибку, замените /me на «/users/userId» в коде, поскольку поток учетных данных клиента не является делегированным потоком для поддержки конечной точки /me.

Когда я снова запустил код после замены его на /users/userId, я получил ответ, в котором событие успешно создано, как показано ниже:

const calendarId = '################';

console.info("Scheduling....")

graphClient.api(`/users/userId/calendars/${calendarId}/events`).post(event)
  .then(response => {
      console.info('Event created successfully:', response);
  })
  .catch(error => {
      console.error('Error creating event:', error);
  });

Ответ:

Другие вопросы по теме