Как отправлять аутентифицированные запросы в Microsoft Graph из конечной точки веб-подключения подписки для других пользователей, когда приходит уведомление об изменении? - PullRequest
1 голос
/ 10 апреля 2019

Я использую аутентификацию Azure AD через приложение Azure AD (настройка как для организации / школы, так и для личных учетных записей), и пользователи авторизуются через стандартный сценарий OpenConnect с веб-сайта.

У меня также есть веб-служба Azure, которая прослушивает уведомления об изменениях для разных вещей (используя тот же Client / Secret / Tenant = common), таких как Контакты и События. Это все работает хорошо, однако, когда (например) новый Контакт создается или обновляется, мне нужно использовать Graph SDK, чтобы получить фактический Контакт и обновить вторичное хранилище данных.

Сейчас я использую типичный DelegateAuthenticationProvider, однако всегда возникает проблема с доступом к контактам других пользователей, поскольку я обычно получаю что-то вроде «Токен не содержит разрешений, или разрешения не могут быть поняты».

var graphClient = new GraphServiceClient(new DelegateAuthenticationProvider((requestMessage) =>
{
    var accessToken = GetAccessToken().Result;

    requestMessage
        .Headers
        .Authorization = new AuthenticationHeaderValue("bearer", accessToken);

    return Task.FromResult(0);
}));

return graphClient;

Похоже, что этот токен доступа делегата, который создается, должен быть в состоянии захватить фактический Контакт, так как он настроен в Области и пользователь принял.

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

1 Ответ

0 голосов
/ 10 апреля 2019

Вам либо необходимо получить доступ Application к арендатору, либо запросить делегированную область действия offline_access.

Если вы используете offline_access, вы получите дополнительный токен с именем refresh_token. Вам нужно будет сохранить это для каждого пользователя и использовать его для получения нового access_token, когда вы получите уведомление и вам нужно будет звонить в Graph. См. Используйте токен обновления для получения нового токена доступа в документации для получения подробных инструкций.

...