Запросы к MS Graph API дают мне «Запрос авторизации отклонен - ​​Недостаточно прав для завершения операции»

У меня есть вопрос о сообщении «Запрос авторизации отклонен - ​​недостаточно прав для завершения операции», которое я продолжаю возвращать из своих запросов в Windows Graph API.

В частности, я работаю в облаке Azure. У меня есть мобильное приложение iOS, которое вызывает API. Я включил «Аутентификация для Active Directory» на моем портале.

Затем на стороне клиента (iOS):

[self.todoService.client loginWithProvider:@"windowsazureactivedirectory"
                                controller:self
                                  animated:YES
                                completion:^(MSUser *user, NSError *error) {

                                    if(!error && user) {
                                        [self refresh];

                                    } 
                                }]; //loginWithProvider

Так возвращает действительный объект MSUser. Я вижу, что появляется веб-контроллер входа в систему, я вхожу в систему с помощью моего / pw, а затем он позволяет мне получить доступ к данным моего Easy Table ... и т. Д.

Теперь я хочу вызвать простой API, созданный в Azure, под названиемgetUserData, Следовательно, я просто вставляю код invokeAPI, как этот (iOS):

[self.todoService.client loginWithProvider:@"windowsazureactivedirectory"
                                controller:self
                                  animated:YES
                                completion:^(MSUser *user, NSError *error) {

                                    if(!error && user) {

                                        //NSMutableDictionary * dict = [NSMutableDictionary dictionary];
                                        //[dict setObject:@YES forKey:@"complete"];

                                        NSLog(@"%s - %@", __FUNCTION__, user);
                                        [self refresh];

                                        [self.todoService.client invokeAPI:@"getUserData"
                                                                      body:nil
                                                                HTTPMethod:@"POST"
                                                                parameters:nil
                                                                   headers:nil
                                                                completion:^(id  _Nullable result, NSHTTPURLResponse * _Nullable response, NSError * _Nullable error) {
                                                                    NSLog(@"%s - API returned response! ", __FUNCTION__);
                                                                    NSLog(@"%@", result); //TODO: user info here!! :D

                                                                }]; //invokAPI

                                    } //if user returned from AAD login is valid

                                }]; //loginWithProvider

Все хорошо, так как API вызывается, и я вижу данные ответа.

На стороне сервера (Node JS) я делаю 3 вещи:

Во-первых, получить идентификатор объекта пользователя из объекта запроса:

req.azureMobile.user.getIdentity().then((data) => {
   //get user object ID
}

2-й, сделайте запросhttps://login.windows.net получить токен доступа с именем пользователя / паролем.

var options = {
    url: "https://login.windows.net/" + tenant_domain + "/oauth2/token?api-version=1.0",
    method: 'POST',
    form: {
        grant_type: "client_credentials",
        resource: "https://graph.windows.net",
        client_id: clientID,
        client_secret: key
    }
};

req(options, function (err, resp, body) {
    //get the result back
}

Я получаю целую кучу данных обратно, включая токен доступа.

3-й, сделайте запросhttps://graph.windows.net/и предоставьте это, токен доступа вместе с моим идентификатором объекта пользователя:

var options = {
    url: "https://graph.windows.net/" + tenant_domain + "/users/" + objectId + "?api-version=1.0",
    method: 'GET',
    headers: {
        "Authorization": "Bearer " + access_token
    }
};

Это так, что я могуДанные пользователя, Теперь в отдельной тестовой подписке я установил все основные разрешения на чтение для AAD и Graph в своем управлении AAD. Я успешно вернул полные данные пользователя примерно так:

user =     {
    accountEnabled = 1;
    assignedLicenses =         (
    );
    assignedPlans =         (
    );
    city = xxxxxxxxx;
    country = xxxxxxxxxx;
    department = Dev;
    dirSyncEnabled = "<null>";
    displayName = xxxxxx;
    facsimileTelephoneNumber = "<null>";
    givenName = hehe;
    jobTitle = "iOS dev";
    lastDirSyncTime = "<null>";
    mail = "<null>";
    mailNickname = "xxxxxxxxxx.com#EXT#";
    mobile = "+xx xxx xxxx 3852";
    objectId = "xxxxxxx-2c70-4aab-b261-3b2b97dc5c50";
    objectType = User;
    "odata.metadata" = "https://graph.windows.net/xxxxxxxxxx.onmicrosoft.com/$metadata#directoryObjects/Microsoft.WindowsAzure.ActiveDirectory.User/@Element";
    "odata.type" = "Microsoft.WindowsAzure.ActiveDirectory.User";
    otherMails =         (
        "[email protected]"
    );
...etc
}

Однако в другой подписке я сделал те же самые шаги. Даже до проверки всех разрешений, например, так:

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

Я не могу понять почему, потому что все проходит, и я проверил все свои разрешения AAD и Graph.

лог результат:

----- тело ------

'{"odata.error": {"code": "Authorization_RequestDenied", "message": {"lang": "en", "value": "Недостаточно прав для завершения операции."}}}'

Спасибо за любую помощь и ценим время каждого

Ответы на вопрос(1)

Ваш ответ на вопрос