Anfragen an die MS Graph-API geben mir "Autorisierungsanfrage abgelehnt - Unzureichende Berechtigungen zum Abschließen des Vorgangs".

Ich habe eine Frage zu der Meldung "Autorisierungsanforderung verweigert - Unzureichende Berechtigungen zum Abschließen des Vorgangs", die ich von meinen Anforderungen an die Windows Graph-API immer wieder erhalte.

Insbesondere arbeite ich in der Azure-Cloud. Ich habe eine iOS Mobile App, die eine API aufruft. Ich habe in meinem Portal "Authentifizierung für Active Directory" aktiviert.

Dann auf der Clientseite (iOS):

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

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

                                    } 
                                }]; //loginWithProvider

So gibt ein gültiges MSUser-Objekt zurück. Ich sehe den Web Login Controller, melde mich mit meinem un / pw an und kann dann auf die Daten meines Easy Table zugreifen ... etc.

Nun möchte ich eine einfache API aufrufen, die ich in Azure erstellt habe: getUserData. Daher füge ich einfach den invokeAPI-Code wie folgt ein (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

Alles ist in Ordnung, da die API aufgerufen wird und ich die Antwortdaten sehen kann.

uf der Serverseite (Node JS) mache ich im Grunde 3 Dinge:

ei @ 1st wird die Benutzerobjekt-ID aus dem Anforderungsobjekt abgerufen:

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

2. Anfrage an @ stellhttps: //login.windows.ne, um ein Zugriffstoken mit einem Benutzernamen / Passwort zu erhalten.

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
}

Ich erhalte eine ganze Reihe von Daten zurück, einschließlich des Zugriffstokens.

3. Anfrage an @ stellhttps: //graph.windows.net und geben Sie dieses Access Token zusammen mit meiner Benutzerobjekt-ID an:

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

Das ist so, dass ichBenutzerdate. Jetzt habe ich in einem separaten Testabonnement alle grundlegenden Leseberechtigungen für AAD und Graph in meiner AAD-Verwaltung eingerichtet. Ich erhalte die vollständigen Daten des Benutzers wie folgt zurück:

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
}

In einem anderen Abonnement habe ich jedoch genau die gleichen Schritte ausgeführt. Ich gehe sogar so weit, dass ich alle Berechtigungen wie folgt überprüfe:

Ich erhalte weiterhin die Meldung "Autorisierungsanfrage abgelehnt, unzureichende Berechtigungen". Der Fehler ist null, damit ich weiß, dass alles andere richtig durchgegangen ist.

Ich kann nicht herausfinden warum, weil alles durchläuft und ich alle meine AAD- und Graph-Berechtigungen überprüft habe.

log Ergebnis:

-----Körper-----

'{"odata.error": {"code": "Authorization_RequestDenied", "message": {"lang": "en", "value": "Unzureichende Berechtigungen zum Abschließen des Vorgangs."}}'

ielen Dank für jede Hilfe und schätzen die Zeit aller

Antworten auf die Frage(2)

Ihre Antwort auf die Frage