Наше приложение будет выполнять простые функции User.ReadBasic.All, которые, насколько я понимаю, не требуют прав администратора. Используя описанный здесь процесс: https://graph.microsoft.io/en-us/docs/authorization/app_only
POST https://login.microsoftonline.com/{tenantId}/oauth2/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials
&client_id=<clientId>
&client_secret=<clientSecret>
&resource=https://graph.microsoft.com
Я могу получить действительный токен доступа, однако при вызове графа возвращается следующее сообщение об ошибке:
“code": "Authorization_IdentityNotFound", "The identity of the calling application could not be established."
Мы настроили наше приложение в консоли управления так, чтобы оно имело разрешения User.ReadAll.Basic, и что интересно, я получаю успешный результат от API, когда использую свой собственный кэш учетных данных/токенов для запуска экземпляра ConfidentialClientApplication. с appId и секретом и вызовите AcquireTokenSilentAsync для токена:
string signedInUserID = ClaimsPrincipal.Current.FindFirst(ClaimTypes.NameIdentifier).Value;
tokenCache = new SessionTokenCache(
signedInUserID,
HttpContext.Current.GetOwinContext().Environment["System.Web.HttpContextBase"] as HttpContextBase);
ConfidentialClientApplication cca = new ConfidentialClientApplication(
appId,
redirectUri,
new ClientCredential(appSecret),
tokenCache);
Но мы создаем безголовый сервис без отслеживания состояния, который не будет взаимодействовать с пользователем, и поэтому в идеале мы не хотим отвечать на учетные данные пользователя и кеш токена для получения токена доступа. Я не уверен, почему один сценарий работает, а другой возвращает ошибку IdentityNotFound, и любые ваши советы приветствуются.