Считывание Azure групп AD с помощью контроллера Web API завершается с «Недостаточно прав для завершения операции» - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть приложение Web API, зарегистрированное в AAD моей компании. Это мультитенантное приложение, способное запрашивать AAD подписчиков. Когда клиенты подписываются на наш сервис, они регистрируют наше приложение в разделе регистрации корпоративных приложений AAD и предоставляют нам tenantId, clientId и clientSecret. Затем мы используем эти параметры для запроса AAD клиента.

Я использую следующее для чтения групп из Azure AD клиента:

    public async Task<GraphServiceClient> CreateGraphServiceClient(string tenantId, string clientId, string clientSecret)
    {
        string aadInstance = "https://login.microsoftonline.com/{0}";
        string resource = "https://graph.microsoft.com";
        string authority = string.Format(aadInstance, tenantId);

        AuthenticationContext authContext = new AuthenticationContext(authority);
        ClientCredential credentials = new ClientCredential(clientId, clientSecret);
        var authResult = await authContext.AcquireTokenAsync(resource, credentials);
        if(authResult == null)
        {
            throw new Exception("GetGraphServiceClient: AcquireTokenAsync failed!");
        }

        var accessToken = authResult.AccessToken;
        var graphServiceClient = new GraphServiceClient(
            new DelegateAuthenticationProvider(
                requestMessageClientOtherTenant =>
                {
                    requestMessageClientOtherTenant.Headers.Authorization = new AuthenticationHeaderValue("bearer", accessToken);
                    return Task.FromResult(0);
                }));

        return graphServiceClient;
    }

//....
        var graphServiceClient = CreateGraphClient(tenantId, clientId, clientSecret);

        var graphGroupsPage = await graphServiceClient.Groups
            .Request()
            .Select(e => new {
                e.Id,
                e.DisplayName
            })
            .GetAsync();

Я получаю «Недостаточные привилегии для завершения» ошибка операции.

Я видел довольно много обходных путей, которым было 2-3 года, но ни один из них не работал для меня.

Разрешения, предоставленные приложению в разделе «Корпоративные приложения» клиента: enter image description here

Эти разрешения в точности совпадают с разрешениями, назначенными приложению в нашей регистрации AAD.

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

Я могу использовать тот же графический клиент, чтобы без проблем получить всех пользователей из AAD клиента.

Любое предложение будет оценено.

1 Ответ

1 голос
/ 20 апреля 2020

Когда клиенты подписываются на наш сервис, они регистрируют наше приложение в разделе регистрации корпоративных приложений AAD и предоставляют нам tenantId, clientId и clientSecret. Затем мы используем эти параметры для запроса AAD клиента.

Поскольку ваш клиент предоставил вашему мультитенантному приложению доступ к его информации об арендаторе, требуется только tennantId клиента, вы должны использовать свой собственный мульти-клиент. clientId и clientSecret приложения арендатора для доступа к AD клиентов.

Если вы используете client_id и secret клиента, вы должны проверить разрешения в их приложении (не в приложении для предприятия), но это не имеет никакого смысла. Если это так, нет необходимости использовать ваше мультитенантное приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...