Quickstart: Een token ophalen en de Microsoft Graph API aanroepen met behulp van de identiteit van een console-app
Welkom. Dit is waarschijnlijk niet de pagina die u verwachtte te zien. Terwijl we aan een oplossing voor dit probleem werken, kunt u met deze koppeling naar het juiste artikel gaan:
Quickstart: Een token verkrijgen en Microsoft Graph aanroepen in een .NET-console-app
Onze excuses voor het ongemak en bedankt voor uw geduld tijdens onze inspanningen om dit probleem op te lossen.
In de volgende quickstart wordt een codevoorbeeld gebruikt om te laten zien hoe een .NET-consoletoepassing een toegangstoken kan krijgen om de Microsoft Graph API aan te roepen en een lijst met gebruikers weer te geven in de map. Het laat ook zien hoe een taak of een Windows-service kan worden uitgevoerd met een toepassings-id, in plaats van de identiteit van een gebruiker. De voorbeeldconsoletoepassing in deze quickstart is ook een daemon-toepassing, daarom is het een vertrouwelijke clienttoepassing.
Vereisten
Een minimale vereiste van .NET 6.0 SDK.
Uw snelstart-app downloaden en configureren
Stap 1: uw toepassing configureren in de Azure-portal
Voordat het codevoorbeeld in deze quickstart werkt, maakt u een clientgeheim en voegt u de machtiging User.Read.All van de Graph API toe.
Uw toepassing is geconfigureerd met deze kenmerken.
Stap 2: Uw Visual Studio-project downloaden
Voer het project uit met behulp van Visual Studio 2022.
Tip
Om fouten te voorkomen die worden veroorzaakt door padlengtebeperkingen in Windows, raden we u aan het archief te extraheren of de opslagplaats te klonen in een map dicht bij de hoofdmap van uw station.
Notitie
Enter_the_Supported_Account_Info_Here
Stap 3: Beheerderstoestemming
Het uitvoeren van de toepassing resulteert nu in de uitvoer HTTP 403 - Forbidden* error: "Insufficient privileges to complete the operation
. Deze fout treedt op omdat voor elke app-enige machtiging een globale beheerder van de directory is vereist om toestemming te geven voor de toepassing. Selecteer een van de volgende opties, afhankelijk van de rol.
Globale tenantbeheerder
Ga voor een globale tenantbeheerder naar de pagina API-machtigingen en selecteer Beheerderstoestemming verlenen voor Enter_the_Tenant_Name_Here.
Standaardgebruiker
Voor een standaardgebruiker van uw tenant vraagt u een globale beheerder om beheerderstoestemming te verlenen aan de toepassing. Geef hiervoor de volgende URL op voor de beheerder:
https://login.microsoftonline.com/Enter_the_Tenant_Id_Here/adminconsent?client_id=Enter_the_Application_Id_Here
De fout AADSTS50011: No reply address is registered for the application
kan worden weergegeven nadat u toestemming voor de app hebt verleend met behulp van de voorgaande URL. Deze fout treedt op omdat de toepassing en de URL geen omleidings-URI hebben. U kunt deze waarschuwing negeren.
Stap 4: De toepassing uitvoeren
Druk in Visual Studio op F5 om de toepassing uit te voeren. Anders voert u de toepassing uit via de opdrachtprompt, console of terminal:
cd {ProjectFolder}\1-Call-MSGraph\daemon-console
dotnet run
In die code:
{ProjectFolder}
is de map waar u het zip-bestand hebt uitgepakt. Een voorbeeld isC:\Azure-Samples\active-directory-dotnetcore-daemon-v2
.
Als gevolg hiervan moet een lijst met gebruikers in Microsoft Entra ID worden weergegeven.
Deze quickstarttoepassing gebruikt een clientgeheim om zichzelf te identificeren als een vertrouwelijke client. Het clientgeheim wordt toegevoegd als een tekstbestand zonder opmaak aan de projectbestanden. Om veiligheidsredenen is het raadzaam om een certificaat te gebruiken in plaats van een clientgeheim voordat u de toepassing als productietoepassing overweegt. Zie voor meer informatie over het gebruik van een certificaat deze instructies.
Meer informatie
Deze sectie bevat een overzicht van de code die vereist is voor het aanmelden van gebruikers. Dit overzicht kan handig zijn om te begrijpen hoe de > code werkt, wat de belangrijkste argumenten zijn en hoe u aanmelding toevoegt aan een bestaande .NET-consoletoepassing.
Hoe het voorbeeld werkt
Microsoft.Identity.Web.GraphServiceClient
Microsoft Identity Web (in het pakket Microsoft.Identity.Web.TokenAcquisition ) is de bibliotheek die wordt gebruikt om tokens aan te vragen voor toegang tot een API die wordt beveiligd door het Microsoft Identity Platform. Met deze snelstart worden tokens aangevraagd met behulp van de eigen identiteit van de toepassing in plaats van gedelegeerde machtigingen. De verificatiestroom in dit voorbeeld staat bekend als de OAuth-stroom voor clientreferenties. Zie dit artikel voor meer informatie over het gebruik van MSAL.NET met een clientreferentiestroom. Aangezien de daemon-app in deze quickstart Microsoft Graph aanroept, installeert u het pakket Microsoft.Identity.Web.GraphServiceClient , dat automatisch geverifieerde aanvragen naar Microsoft Graph verwerkt (en verwijst naar microsoft.Identity.Web.TokenAcquisition)
Microsoft.Identity.Web.GraphServiceClient kan worden geïnstalleerd door de volgende opdracht uit te voeren in de Visual Studio Pakketbeheer Console:
dotnet add package Microsoft.Identity.Web.GraphServiceClient
Initialisatie van toepassingen
Voeg de verwijzing voor Microsoft.Identity.Web toe door de volgende code toe te voegen:
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Graph;
using Microsoft.Identity.Abstractions;
using Microsoft.Identity.Web;
Initialiseer vervolgens de app met het volgende:
// Get the Token acquirer factory instance. By default it reads an appsettings.json
// file if it exists in the same folder as the app (make sure that the
// "Copy to Output Directory" property of the appsettings.json file is "Copy if newer").
TokenAcquirerFactory tokenAcquirerFactory = TokenAcquirerFactory.GetDefaultInstance();
// Configure the application options to be read from the configuration
// and add the services you need (Graph, token cache)
IServiceCollection services = tokenAcquirerFactory.Services;
services.AddMicrosoftGraph();
// By default, you get an in-memory token cache.
// For more token cache serialization options, see https://aka.ms/msal-net-token-cache-serialization
// Resolve the dependency injection.
var serviceProvider = tokenAcquirerFactory.Build();
Deze code maakt gebruik van de configuratie die is gedefinieerd in het appsettings.json-bestand:
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"TenantId": "[Enter here the tenantID or domain name for your Azure AD tenant]",
"ClientId": "[Enter here the ClientId for your application]",
"ClientCredentials": [
{
"SourceType": "ClientSecret",
"ClientSecret": "[Enter here a client secret for your application]"
}
]
}
}
Element | Beschrijving |
---|---|
ClientSecret |
Het clientgeheim dat voor de toepassing in de Azure-portal is gemaakt. |
ClientId |
De toepassings-id (client-id) voor de toepassing die is geregistreerd in de Azure-portal. Deze waarde vindt u op de overzichtspagina van de app in Azure Portal. |
Instance |
(Optioneel) De beveiligingstokenservice (STS) kan het eindpunt van het exemplaar van de app om te verifiëren. Dit betreft meestal https://login.microsoftonline.com/ de openbare cloud. |
TenantId |
Naam van de tenant of de tenant-id. |
Zie de naslagdocumentatie voor ConfidentialClientApplication
voor meer informatie.
Microsoft Graph aanroepen
Als u een token wilt aanvragen met behulp van de identiteit van de app, gebruikt u de methode AcquireTokenForClient
:
GraphServiceClient graphServiceClient = serviceProvider.GetRequiredService<GraphServiceClient>();
var users = await graphServiceClient.Users
.GetAsync(r => r.Options.WithAppOnly());
Help en ondersteuning
Als u hulp nodig hebt, een probleem wilt melden of meer informatie wilt over uw ondersteuningsopties, raadpleegt u Hulp en ondersteuning voor ontwikkelaars.
Volgende stappen
Bekijk het overzicht van scenario's voor meer informatie over daemontoepassingen: