web-dev-qa-db-de.com

Diagramm-API - Unzureichende Berechtigungen zum Abschließen des Vorgangs

Beim Versuch, auf den Graph Service Client zuzugreifen, erhalte ich die Fehlermeldung:

Code: Authorization_RequestDenied
Nachricht: Unzureichende Berechtigungen zum Abschließen des Vorgangs.

Nach der Untersuchung dieses Fehlers bestand die häufigste Lösung darin, die Berechtigungen für die API festzulegen. Dies wurde bereits durchgeführt und hat die Berechtigung, grundlegende/vollständige Profile zu lesen. 

Ich habe die APIs gelöscht und wieder hinzugefügt. 

Nachfolgend finden Sie den Code in meiner AzureAuthenticationProvider-Klasse, der von IAuthenticationProvider erbt: 

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)
        {
        }
    }
}

Ich habe versucht, das Clientgeheimnis in eine ungültige ID zu ändern, und es wurde ein Fehler ausgegeben, sodass der Clientschlüssel korrekt ist. Ich habe auch versucht, durch Ändern des Zugriffstokens zu überprüfen, ob das Zugriffstoken gültig ist. Dies gibt auch einen Fehler zurück. 

Der obige Code scheint gut zu funktionieren. 

Unten ist der Code, mit dem ich auf Azure AD zugreifen möchte:

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;
}

Jede Hilfe wird sehr geschätzt, und vielen Dank im Voraus für jede Hilfe.  azureADpermissionProperties

18
j9070749

Bitte beachten Sie die folgenden Schritte:

  1. Anscheinend erteilen Sie in Ihrem Screenshot der Anwendung Read and write directory data die Berechtigung für Windows Azure Active Directory (Azure Ad Graph-API). Da Sie Microsoft graph ( https://graph.Microsoft.com/ ) verwenden, müssen Sie die Anwendungsberechtigung für Microsoft Graph: erteilen. enter image description here

  2. Da Sie in Ihrem AAD Administrator sind, können Sie Benutzern in der Organisation die Berechtigung erteilen, indem Sie auf die Schaltfläche Grant permission klicken, die im obigen Screenshot angezeigt wird.

  3. Dann können Sie Ihren Code (Client-Berechtigungsnachweis zum Abrufen des Tokens) verwenden und Benutzerinformationen abfragen. Wenn Sie die Ansprüche in einem von Azure-Anzeige ausgegebenen Zugriffstoken überprüfen, finden Sie die Berechtigung Directory.Read.All in roles anspruch.

9
Nan Yu

 Grant permission Stellen Sie sicher, dass Sie für alle Benutzerkonten auf "Grant Permissions" und dann auf Yes klicken.

9
user1166305

Für mich war der Schlüssel zur Lösung dieses Problems ein Hinweis:

Um die Graph-API mit Ihrem B2C-Mandanten verwenden zu können, müssen Sie eine dedizierte Anwendung mithilfe des generischen Anwendungsregistrierungsmenüs (Alle Dienste und dort standardmäßig nicht als Favorit markiert) im Azure-Portal registrieren, NOT Speisekarte. Sie können die bereits vorhandenen B2C-Anwendungen, die Sie im Anwendungsmenü des Azure AD B2C registriert haben, nicht wiederverwenden.

Weitere Informationen finden Sie auf der Seite AD B2C-Demo für API-Zugriff

5
Honza P.

In einigen Fällen tritt das eigentliche Problem auf, weil wir "Anwendungsberechtigungen" anstelle von "delegierte Berechtigungen" verwenden. In meiner Anwendung habe ich versucht, alle Benutzer mit Anwendungsberechtigungen aufzulisten, und es funktionierte nicht. Als ich zu einer delegierten Berechtigung wechselte, funktionierte es.

Eine kurze Überprüfung wäre also so:

  1. Prüfen Sie, ob Sie Microsoft Graph API oder etwas anderes verwenden
  2. Verwenden Sie delegierte Berechtigungen
  3. Klicken Sie auf Berechtigungen erteilen , um Berechtigungen weiterzuleiten :)

Hoffentlich würde dies jemandem helfen.

2
milan.latinovic

Erteilen Sie Berechtigungen, indem Sie 'Directory.Read.All/Write' ankreuzen. Dies reicht nicht aus.

Ich bin auf dasselbe Problem gestoßen. und gelöst durch Hinzufügen des Dienstprinzips zur Administratorrolle.

Wenn Ihre Anwendung kürzlich erstellt wurde, kann dies mit Azure AD Powershell erfolgen.

$pricinple = Get-AzureADServicePrincipal || Where-Object {$_.DisplayName -eq 'youappname'}

 $role = Get-AzureADDirectoryRole | Where-Object {$_.displayName -eq 'Company Administrator'}

Add-AzureADDirectoryRoleMember -ObjectId $role.ObjectId -RefObjectId $pricinple.ObjectId

ausführliche Informationen finden Sie unter https://docs.Microsoft.com/en-us/powershell/module/Azuread/Add-AzureADDirectoryRoleMember?view=azureadps-2.

Wenn Ihre Anwendung vor langer Zeit erstellt wurde, müssen Sie MSOnline verwenden. Siehe: https://docs.Microsoft.com/en-us/powershell/module/msonline/Add-MsolRoleMember?view=azureadps-1.

1
Lang

Angenommen, Sie möchten eine Gruppe in Azure Active Directory erstellen Ich muss die folgenden Schritte ausführen, um dieses Problem zu lösen

  1. AD> App Registered> Ihre App
  2. Wählen Sie Erforderliche Berechtigung
  3. Klicken Sie auf Hinzufügen, wählen Sie Microsoft Graph aus und fügen Sie es hinzu
  4. wählen Sie Microsoft Graph aus
  5. wählen Sie Alle Gruppen lesen und schreiben aus der Liste der delegierten Berechtigungen aus
  6. Und rette es
  7. Wählen Sie Windows Azure Active Directory aus und erteilen Sie alle Anwendungsberechtigungen
  8. Speichern Sie es
1
Bilal Malik

Es scheint, als hätte Ihre Anwendung nicht genügend Rechte, um auf AD-Informationen zuzugreifen. Sie können den im folgenden Link/Artikel genannten Schritten folgen, um sich beim Azure-Portal anzumelden und zu überprüfen, ob Ihre Anwendung über ausreichende Berechtigungen für den Zugriff auf AD verfügt.

http://www.morgantechspace.com/2016/01/graph-api-noch ausreichend-privilegien-zum-komplette-der-operation.html

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

Ich hoffe auch, dass "authResult.AccessToken" in Ihrem Fall nicht null ist. Eine Sache, der zweite Link oben, enthält sehr detaillierte Erklärungen zu den Zugriffsrechten für Anwendungen auf AD. könnte dir helfen.

1
Sujith