Ошибка Authorization_IdentityNotFound MS Graph API

Наше приложение будет выполнять простые функции 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, и любые ваши советы приветствуются.


person ranah    schedule 01.03.2017    source источник
comment
Вы смогли это решить? У меня точно такая же проблема   -  person NBajanca    schedule 22.03.2017
comment
Привет @NBajanca, да, это была проблема с правами администратора для конкретной области, к которой мы пытались получить доступ. Как только нашему приложению был предоставлен доступ от администратора для чтения данных каталога в нашем арендаторе, мы смогли запросить через идентификатор приложения (мы решили использовать сертификат, который более безопасен, чем секрет приложения). Дайте мне знать, если у вас есть другие вопросы   -  person ranah    schedule 24.03.2017
comment
Спасибо, я тоже это нашла. Я создал проблему в документах Microsoft graph, чтобы узнать, могут ли они лучше объяснить области   -  person NBajanca    schedule 24.03.2017


Ответы (1)


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

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

Вы можете попробовать приведенный ниже код, чтобы пользователи использовали ADAL:

        string authority = "https://login.microsoftonline.com/a703965c-e057-4bf6-bf74-1d7d82964996";
        AuthenticationContext authenticationContext = new AuthenticationContext(authority, false);
        var result= await authenticationContext.AcquireTokenAsync("https://graph.microsoft.com", new ClientCredential("clientid", "clientsecret"));


        string sURL = "https://graph.microsoft.com/v1.0/users";

        WebRequest request1 = WebRequest.Create(sURL);
        request1.Method = "GET";
        request1.Headers.Add("Authorization", "Bearer " + result.AccessToken);
        HttpWebResponse response1 = (HttpWebResponse)request1.GetResponse();
        if (response1.StatusCode == HttpStatusCode.OK)
        {
            // some code
        }

Вы можете установить разрешение приложения «Читать полные профили всех пользователей» для Microsfot Graph (для тестирования):

введите здесь описание изображения

person Nan Yu    schedule 02.03.2017