Share via


Snabbstart: Hämta en token och anropa Microsoft Graph API med hjälp av en konsolapps identitet

Välkommen! Det här är förmodligen inte den sida du förväntade dig. När vi arbetar med en korrigering bör den här länken ta dig till rätt artikel:

Snabbstart: Hämta en token och anropa Microsoft Graph i en .NET-konsolapp

Vi ber om ursäkt för besväret och uppskattar ditt tålamod medan vi arbetar för att få detta löst.

I följande snabbstart används ett kodexempel för att visa hur ett .NET-konsolprogram kan hämta en åtkomsttoken för att anropa Microsoft Graph API och visa en lista över användare i katalogen. Den visar också hur ett jobb eller en Windows-tjänst kan köras med en programidentitet i stället för en användares identitet. Exempelkonsolprogrammet i den här snabbstarten är också ett daemonprogram, därför är det ett konfidentiellt klientprogram.

Förutsättningar

Ett minimikrav för .NET 6.0 SDK.

Hämta och konfigurera din app för Snabbstart

Steg 1: Konfigurera din app i Azure-portalen

För att kodexemplet i den här snabbstarten ska fungera skapar du en klienthemlighet och lägger till Graph API:ets user.Read.All-programbehörighet .

Redan konfigurerad Programmet har konfigurerats med dessa attribut.

Steg 2: Ladda ned ditt Visual Studio-projekt

Kör projektet med hjälp av Visual Studio 2022.

Dricks

För att undvika fel som orsakas av sökvägslängdsbegränsningar i Windows rekommenderar vi att du extraherar arkivet eller klonar lagringsplatsen till en katalog nära roten på enheten.

Kommentar

Enter_the_Supported_Account_Info_Here

Om du kör programmet resulterar det nu i utdata HTTP 403 - Forbidden* error: "Insufficient privileges to complete the operation. Det här felet beror på att alla programbehörigheter kräver en global administratör för katalogen för att ge medgivande till programmet. Välj något av följande alternativ, beroende på roll.

Global innehavaradministratör

För en global klientadministratör går du till sidan API-behörigheter och väljer Bevilja administratörsmedgivande för Enter_the_Tenant_Name_Here.

Standardanvändare

För en standardanvändare av din klientorganisation ber du en global administratör att bevilja administratörsmedgivande till programmet. Det gör du genom att ange följande URL till administratören:

https://login.microsoftonline.com/Enter_the_Tenant_Id_Here/adminconsent?client_id=Enter_the_Application_Id_Here

Felet AADSTS50011: No reply address is registered for the application kan visas när du har beviljat medgivande till appen med hjälp av föregående URL. Det här felet beror på att programmet och URL:en inte har någon omdirigerings-URI. Detta kan ignoreras.

Steg 4: Kör programmet

I Visual Studio trycker du på F5 för att köra programmet. Annars kör du programmet via kommandotolken, konsolen eller terminalen:

cd {ProjectFolder}\1-Call-MSGraph\daemon-console
dotnet run

I den koden:

  • {ProjectFolder} är mappen där du extraherade .zip-filen. Ett exempel är C:\Azure-Samples\active-directory-dotnetcore-daemon-v2.

En lista över användare i Microsoft Entra-ID bör därför visas.

Det här snabbstartsprogrammet använder en klienthemlighet för att identifiera sig som en konfidentiell klient. Klienthemligheten läggs till som en oformaterad textfil i projektfilerna. Av säkerhetsskäl rekommenderar vi att du använder ett certifikat i stället för en klienthemlighet innan du överväger programmet som ett produktionsprogram. Mer information om hur du använder ett certifikat finns i de här anvisningarna.

Mer information

Det här avsnittet ger en översikt över den kod som krävs för att logga in användare. Den här översikten > kan vara användbar för att förstå hur koden fungerar, vilka huvudargumenten är och hur du lägger till inloggning i ett befintligt .NET-konsolprogram.

Så här fungerar exemplet

Diagram som visar hur exempelappen som genereras av den här snabbstarten fungerar.

Microsoft.Identity.Web.GraphServiceClient

Microsoft Identity Web (i paketet Microsoft.Identity.Web.TokenAcquisition) är det bibliotek som används för att begära token för åtkomst till ett API som skyddas av Microsofts identitetsplattform. Den här snabbstarten begär token med hjälp av programmets egen identitet i stället för delegerade behörigheter. Autentiseringsflödet i det här fallet kallas för ett OAuth-flöde för klientautentiseringsuppgifter. Mer information om hur du använder MSAL.NET med ett flöde för klientautentiseringsuppgifter finns i den här artikeln. Med tanke på daemon-appen i den här snabbstarten som anropar Microsoft Graph installerar du paketet Microsoft.Identity.Web.GraphServiceClient, som hanterar automatiskt autentiserade begäranden till Microsoft Graph (och refererar till sig själv Microsoft.Identity.Web.TokenAcquisition)

Microsoft.Identity.Web.GraphServiceClient kan installeras genom att köra följande kommando i Visual Studio Package Manager-konsolen:

dotnet add package Microsoft.Identity.Web.GraphServiceClient

Programinitiering

Lägg till referensen för Microsoft.Identity.Web genom att lägga till följande kod:

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Graph;
using Microsoft.Identity.Abstractions;
using Microsoft.Identity.Web;

Initiera sedan appen med följande:

// 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();

Den här koden använder konfigurationen som definierats i filen appsettings.json:

{
   "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 Description
ClientSecret Klienthemligheten som skapats för programmet i Azure-portalen.
ClientId Program-ID:t (klient) för programmet som registrerats i Azure-portalen. Det här värdet finns på appens översiktssida i Azure-portalen.
Instance (Valfritt) Säkerhetstokentjänsten (STS) kan instansslutpunkt för appen att autentisera. Det är vanligtvis https://login.microsoftonline.com/ för det offentliga molnet.
TenantId Namnet på klientorganisationen eller klientorganisations-ID:t.

Mer information finns i referensdokumentationen för ConfidentialClientApplication.

Anropa Microsoft Graph

Om du vill begära en token med hjälp av appens identitet använder du AcquireTokenForClient metoden:

GraphServiceClient graphServiceClient = serviceProvider.GetRequiredService<GraphServiceClient>();
var users = await graphServiceClient.Users
              .GetAsync(r => r.Options.WithAppOnly());

Hjälp och support

Om du behöver hjälp, vill rapportera ett problem eller vill lära dig mer om dina supportalternativ kan du läsa Hjälp och support för utvecklare.

Nästa steg

Mer information om daemonprogram finns i scenarioöversikten: