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.
Bitte beachten Sie die folgenden Schritte:
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.
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.
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.
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
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:
Hoffentlich würde dies jemandem helfen.
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.
Angenommen, Sie möchten eine Gruppe in Azure Active Directory erstellen Ich muss die folgenden Schritte ausführen, um dieses Problem zu lösen
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.
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.