it-roy-ru.com

Graph API - Недостаточно прав для завершения операции

При попытке получить доступ к клиенту службы графов я получаю сообщение об ошибке:

Код: Authorization_RequestDenied
Сообщение: недостаточно прав для завершения операции.

После исследования этой ошибки наиболее распространенным решением было установить разрешения для API. Это уже было сделано и имеет права на чтение основных/полных профилей. 

Я удалил и заново добавил API. 

Ниже приведен код моего класса AzureAuthenticationProvider, который наследуется от IAuthenticationProvider

public class AzureAuthenticationProvider : IAuthenticationProvider
{
    private string _azureDomain = "myDevDom.onmicrosoft.com";

    public async Task AuthenticateRequestAsync(HttpRequestMessage request)
    {
        try
        {
            string clientId = "2b823c67-1b0d-4a10-a9e1-737142516f5q";
            string clientSecret = "xxxxxx";

            AuthenticationContext authContext = new AuthenticationContext("https://login.windows.net/" + _azureDomain + "/oauth2/token");

            ClientCredential credentials = new ClientCredential(clientId, clientSecret);

            AuthenticationResult authResult = await authContext.AcquireTokenAsync("https://graph.Microsoft.com/", credentials);

            request.Headers.Add("Authorization", "Bearer " + authResult.AccessToken);
        }
        catch (Exception ex)
        {
        }
    }
}

Я попытался изменить секрет клиента на недопустимый идентификатор, и он выдал ошибку, поэтому ключ клиента правильный. Я также попытался проверить, что токен доступа действителен, изменив токен доступа, это также возвращает ошибку. 

Код выше, кажется, работает нормально. 

Ниже приведен код доступа к Azure AD:

public async Task<IGraphServiceUsersCollectionPage> GetUsersByLastName(string lastname)  
{
    GraphServiceClient graphClient = new GraphServiceClient(new AzureAuthenticationProvider());
    string filter = String.Format("startswith(surname, '{0}')", lastname);
    IGraphServiceUsersCollectionPage users = await graphClient.Users.Request().Filter(filter).GetAsync(); //Fails on this line
    return users;
}

Любая помощь очень ценится, и заранее спасибо за любую помощь.  azureADpermissionProperties

18
j9070749

Пожалуйста, обратитесь к ниже шагов:

  1. Из вашего скриншота видно, что вы даете Read and write directory data разрешение на приложение для Windows Azure Active Directory (API рекламного графа Azure). Поскольку вы используете график Microsoft ( https://graph.Microsoft.com/ ), вам необходимо предоставить разрешение приложения для Microsoft Graph:  enter image description here

  2. Поскольку вы являетесь администратором AAD, вы можете предоставить разрешение пользователям в организации, нажав кнопку Grant permission, показанную на снимке экрана выше.

  3. Затем вы можете использовать свой код (поток учетных данных клиента для получения токена) и запрашивать информацию о пользователях. Если вы проверите утверждения в маркере доступа, выданном объявлением Azure, вы можете найти разрешение Directory.Read.All в утверждении roles.

9
Nan Yu

 Grant permission Убедитесь, что нажмите «Предоставить разрешения» и нажмите «Да» для всех учетных записей пользователей.

9
user1166305

Для меня ключом к решению этой проблемы был намек:

Чтобы использовать API-интерфейс Graph с вашим клиентом B2C, вам нужно зарегистрировать отдельное приложение, используя общее меню регистрации приложений (все службы, и там оно по умолчанию не отмечено избранным) на портале Azure, NOT приложения Azure AD B2C меню. Вы не можете повторно использовать уже существующие приложения B2C, которые вы зарегистрировали в меню приложений Azure AD B2C.

Узнайте больше на странице AD B2C демо доступа API

5
Honza P.

В некоторых случаях настоящая проблема возникает из-за того, что мы используем «Разрешения приложений» вместо «Делегированных разрешений». В моем приложении я попытался перечислить всех пользователей с разрешениями приложения, и это не сработало. Когда я переключился на делегированные разрешения, это сработало.

Итак, некоторая быстрая проверка была бы такой:

  1. Проверьте, используете ли вы Microsoft Graph API или что-то еще
  2. Использование Делегированные разрешения
  3. Нажмите Предоставить разрешения кнопку для распространения разрешений :)

Надеюсь, это кому-нибудь поможет.

2
milan.latinovic

Предположим, вы хотите создать группу в Azure Active Directory Мне нужно выполнить следующие шаги, чтобы решить эту проблему.

  1. AD> Приложение зарегистрировано> ваше приложение
  2. Выберите необходимое разрешение
  3. Нажмите Добавить, выберите Microsoft Graph и добавьте его.
  4. выберите Microsoft Graph
  5. выберите Чтение и запись всех групп из списка разрешенных разрешений.
  6. И сохранить его
  7. Выберите Windows Azure Active Directory и предоставьте всем приложениям разрешение
  8. Сохрани это
1
Bilal Malik

Похоже, что у вашего приложения недостаточно прав для доступа к информации AD. Вы можете выполнить шаги, указанные в приведенной ниже ссылке/статье, чтобы войти на портал Azure и посмотреть, имеет ли ваше приложение достаточно прав для доступа к AD.

http://www.morgantechspace.com/2016/01/graph-api-insufficient-privileges-to-complete-the-operation.html

https://docs.Microsoft.com/en-us/Azure/active-directory-b2c/active-directory-b2c-devquickstarts-graph-dotnet

Также я надеюсь, что «authResult.AccessToken» не является нулевым в вашем случае .. Одна вещь, вторая ссылка выше, имеет очень подробное объяснение прав доступа приложения к AD. может быть полезным для вас.

1
Sujith