Я использую аутентификацию 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;
Похоже, что этот токен доступа делегата, который создается, должен быть в состоянии захватить фактический Контакт, так как он настроен в Области и пользователь принял.
Есть идеи о том, что мне нужно сделать по-другому, чтобы получить доступ к контактам других пользователей напрямую из службы?