Share via


Självstudie: Få åtkomst till Microsoft Graph från en skyddad .NET-app som användare

Lär dig hur du kommer åt Microsoft Graph från en webbapp som körs i Azure App Service.

Diagram som visar åtkomst till Microsoft Graph.

Du vill lägga till åtkomst till Microsoft Graph från din webbapp och utföra en åtgärd som den inloggade användaren. I det här avsnittet beskrivs hur du beviljar delegerade behörigheter till webbappen och hämtar den inloggade användarens profilinformation från Microsoft Entra-ID.

I den här självstudien lär du dig att:

  • Bevilja delegerade behörigheter till en webbapp.
  • Anropa Microsoft Graph från en webbapp för en inloggad användare.

Om du inte har en Azure-prenumeration skapar du ett kostnadsfritt Azure-konto innan du börjar.

Förutsättningar

Bevilja åtkomst till klientdelen för att anropa Microsoft Graph

Nu när du har aktiverat autentisering och auktorisering i webbappen registreras webbappen med Microsofts identitetsplattform och backas upp av ett Microsoft Entra-program. I det här steget ger du webbappen behörighet att komma åt Microsoft Graph för användaren. (Tekniskt sett ger du webbappens Microsoft Entra-program behörighet att komma åt Microsoft Graph Microsoft Entra-programmet för användaren.)

  1. I administrationscentret för Microsoft Entra väljer du Program.

  2. Välj Appregistreringar> Ägda program>Visa alla program i den här katalogen. Välj webbappens namn och välj sedan API-behörigheter.

  3. Välj Lägg till en behörighet och välj sedan Microsoft API:er och Microsoft Graph.

  4. Välj Delegerade behörigheter och välj sedan User.Read i listan. Välj Lägg till behörigheter.

Konfigurera App Service för att returnera en användbar åtkomsttoken

Webbappen har nu de behörigheter som krävs för att komma åt Microsoft Graph som den inloggade användaren. I det här steget konfigurerar du App Service-autentisering och auktorisering så att du får en användbar åtkomsttoken för åtkomst till Microsoft Graph. För det här steget måste du lägga till User.Read-omfånget för den underordnade tjänsten (Microsoft Graph): https://graph.microsoft.com/User.Read.

Viktigt!

Om du inte konfigurerar App Service för att returnera en användbar åtkomsttoken får du ett CompactToken parsing failed with error code: 80049217 felmeddelande när du anropar Microsoft Graph-API:er i koden.

Gå till Azure Resource Explorer och leta upp webbappen med hjälp av resursträdet. Resurs-URL:en bör likna https://resources.azure.com/subscriptions/subscriptionId/resourceGroups/SecureWebApp/providers/Microsoft.Web/sites/SecureWebApp20200915115914.

Azure Resource Explorer har nu öppnats med webbappen vald i resursträdet.

  1. Längst upp på sidan väljer du Läs/Skriv för att aktivera redigering av dina Azure-resurser.

  2. I den vänstra webbläsaren går du nedåt till config>authsettingsV2.

  3. I vyn authsettingsV2 väljer du Redigera.

  4. Leta reda på inloggningsavsnittet i identityProviders ->azureActiveDirectory och lägg till följande inställningar för loginParameters: "loginParameters":[ "response_type=code id_token","scope=openid offline_access profile https://graph.microsoft.com/User.Read" ] .

    "identityProviders": {
        "azureActiveDirectory": {
          "enabled": true,
          "login": {
            "loginParameters":[
              "response_type=code id_token",
              "scope=openid offline_access profile https://graph.microsoft.com/User.Read"
            ]
          }
        }
      }
    },
    
  5. Spara inställningarna genom att välja PUT. Den här inställningen kan ta flera minuter att börja gälla. Webbappen är nu konfigurerad för åtkomst till Microsoft Graph med en korrekt åtkomsttoken. Om du inte gör det returnerar Microsoft Graph ett fel som säger att formatet för den kompakta token är felaktigt.

Anropa Microsoft Graph med .NET

Webbappen har nu de behörigheter som krävs och lägger även till Microsoft Graphs klient-ID i inloggningsparametrarna.

Med hjälp av Microsoft.Identity.Web-biblioteket hämtar webbappen en åtkomsttoken för autentisering med Microsoft Graph. I version 1.2.0 och senare integreras Microsoft.Identity.Web-biblioteket med och kan köras tillsammans med modulen App Service-autentisering/auktorisering. Microsoft.Identity.Web identifierar att webbappen finns i App Service och hämtar åtkomsttoken från modulen App Service-autentisering/auktorisering. Åtkomsttoken skickas sedan vidare till autentiserade begäranden med Microsoft Graph API.

Information om hur du ser den här koden som en del av ett exempelprogram finns i:

Kommentar

Microsoft.Identity.Web-biblioteket krävs inte i webbappen för grundläggande autentisering/auktorisering eller för att autentisera begäranden med Microsoft Graph. Det går att anropa underordnade API:er på ett säkert sätt med endast App Service-autentiserings-/auktoriseringsmodulen aktiverad.

App Service-autentiseringen/auktoriseringen är dock utformad för mer grundläggande autentiseringsscenarier. För mer komplexa scenarier (till exempel hantering av anpassade anspråk) behöver du Microsoft.Identity.Web-biblioteket eller Microsoft Authentication Library. Det finns lite mer installation och konfiguration i början, men microsoft.Identity.Web-biblioteket kan köras tillsammans med modulen App Service-autentisering/auktorisering. Senare, när webbappen behöver hantera mer komplexa scenarier, kan du inaktivera modulen autentisering/auktorisering för App Service och Microsoft.Identity.Web kommer redan att vara en del av din app.

Installera klientbibliotekspaket

Installera NuGet-paketen Microsoft.Identity.Web och Microsoft.Identity.Web.MicrosoftGraph i projektet med hjälp av kommandoradsgränssnittet för .NET Core eller Package Manager-konsolen i Visual Studio.

.NET Core-kommandorad

Öppna en kommandorad och växla till katalogen som innehåller projektfilen.

Kör installationskommandona.

dotnet add package Microsoft.Identity.Web.MicrosoftGraph

dotnet add package Microsoft.Identity.Web

Package Manager-konsol

Öppna projektet/lösningen i Visual Studio och öppna konsolen med hjälp av kommandot Verktyg>NuGet Package Manager>Package Manager Console.

Kör installationskommandona.

Install-Package Microsoft.Identity.Web.GraphServiceClient

Install-Package Microsoft.Identity.Web

Startup.cs

I filen Startup.cs lägger metoden till Microsoft.Identity.Web i webbappen AddMicrosoftIdentityWebApp . Metoden AddMicrosoftGraph lägger till Microsoft Graph-stöd. Information om hur du hanterar inkrementellt medgivande och villkorlig åtkomst finns i det här.

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Identity.Web;
using Microsoft.AspNetCore.Authentication.OpenIdConnect;

// Some code omitted for brevity.
public class Startup
{
    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
      services.AddOptions();
      string[] initialScopes = Configuration.GetValue<string>("DownstreamApi:Scopes")?.Split(' ');

      services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
              .AddMicrosoftIdentityWebApp(Configuration.GetSection("AzureAd"))
              .EnableTokenAcquisitionToCallDownstreamApi(initialScopes)
                      .AddMicrosoftGraph(Configuration.GetSection("DownstreamApi"))
                      .AddInMemoryTokenCaches(); 

      services.AddAuthorization(options =>
      {
          // By default, all incoming requests will be authorized according to the default policy
          options.FallbackPolicy = options.DefaultPolicy;
      });
      services.AddRazorPages()
          .AddMvcOptions(options => {})                
          .AddMicrosoftIdentityUI();

      services.AddControllersWithViews()
              .AddMicrosoftIdentityUI();
    }
}

appsettings.json

AzureAd anger konfigurationen för Microsoft.Identity.Web-biblioteket. I administrationscentret för Microsoft Entra väljer du Program på portalmenyn och väljer sedan Appregistreringar. Välj den appregistrering som skapades när du aktiverade App Service-autentiserings-/auktoriseringsmodulen. (Appregistreringen bör ha samma namn som din webbapp.) Du hittar klientorganisations-ID:t och klient-ID:t på översiktssidan för appregistrering. Domännamnet finns på översiktssidan för Microsoft Entra för din klientorganisation.

Graph anger Microsoft Graph-slutpunkten och de initiala omfång som krävs av appen.

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "Domain": "[Enter the domain of your tenant, e.g. contoso.onmicrosoft.com]",
    "TenantId": "[Enter 'common', or 'organizations' or the Tenant Id (Obtained from the Microsoft Entra admin center. Select 'Endpoints' from the 'App registrations' blade and use the GUID in any of the URLs), e.g. da41245a5-11b3-996c-00a8-4d99re19f292]",
    "ClientId": "[Enter the Client Id (Application ID obtained from the Microsoft Entra admin center), e.g. ba74781c2-53c2-442a-97c2-3d60re42f403]",
    "ClientSecret": "[Copy the client secret added to the app from the Microsoft Entra admin center]",
    "ClientCertificates": [
    ],
    // the following is required to handle Continuous Access Evaluation challenges
    "ClientCapabilities": [ "cp1" ],
    "CallbackPath": "/signin-oidc"
  },
  "DownstreamApis": {
    "MicrosoftGraph": {
      // Specify BaseUrl if you want to use Microsoft graph in a national cloud.
      // See https://learn.microsoft.com/graph/deployments#microsoft-graph-and-graph-explorer-service-root-endpoints
      // "BaseUrl": "https://graph.microsoft.com/v1.0",

      // Set RequestAppToken this to "true" if you want to request an application token (to call graph on 
      // behalf of the application). The scopes will then automatically
      // be ['https://graph.microsoft.com/.default'].
      // "RequestAppToken": false

      // Set Scopes to request (unless you request an app token).
      "Scopes": [ "User.Read" ]

      // See https://aka.ms/ms-id-web/downstreamApiOptions for all the properties you can set.
    }
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*"
}

Anropa Microsoft Graph för användarens räkning

I följande exempel visas hur du anropar Microsoft Graph som den inloggade användaren och hämtar viss användarinformation. Objektet GraphServiceClient matas in i kontrollanten och autentiseringen har konfigurerats åt dig av Microsoft.Identity.Web-biblioteket.

// Index.cshtml.cs
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Graph;
using System.IO;
using Microsoft.Identity.Web;
using Microsoft.Extensions.Logging;

// Some code omitted for brevity.

[AuthorizeForScopes(Scopes = new[] { "User.Read" })]
public class IndexModel : PageModel
{
    private readonly ILogger<IndexModel> _logger;
    private readonly GraphServiceClient _graphServiceClient;

    public IndexModel(ILogger<IndexModel> logger, GraphServiceClient graphServiceClient)
    {
        _logger = logger;
        _graphServiceClient = graphServiceClient;
    }

    public async Task OnGetAsync()
    {
        try
        {
            var user = await _graphServiceClient.Me.GetAsync();
            ViewData["Me"] = user;
            ViewData["name"] = user.DisplayName;

            using (var photoStream = await _graphServiceClient.Me.Photo.Content.GetAsync())
            {
                byte[] photoByte = ((MemoryStream)photoStream).ToArray();
                ViewData["photo"] = Convert.ToBase64String(photoByte);
            }
        }
        catch (Exception ex)
        {
            ViewData["photo"] = null;
        }
    }
}

Rensa resurser

Om du har slutfört alla steg i den här självstudien för flera delar har du skapat en App Service, en App Service-värdplan och ett lagringskonto i en resursgrupp. Du har också skapat en appregistrering i Microsoft Entra-ID. Om du väljer extern konfiguration kan du ha skapat en ny extern klientorganisation. När de inte längre behövs tar du bort de här resurserna och appregistreringen så att du inte fortsätter att påföra avgifter.

I den här självstudien lär du dig att:

  • Ta bort de Azure-resurser som skapats när du följer självstudien.

Ta bort resursgruppen

I Azure-portalen väljer du Resursgrupper på portalmenyn och väljer den resursgrupp som innehåller din App Service- och App Service-plan.

Välj Ta bort resursgrupp för att ta bort resursgruppen och alla resurser.

Skärmbild som visar hur du tar bort resursgruppen.

Det kan ta flera minuter att köra det här kommandot.

Ta bort appregistreringen

I administrationscentret för Microsoft Entra väljer du Program> Appregistreringar. Välj sedan det program som du skapade. Skärmbild som visar val av appregistrering.

I översikten över appregistrering väljer du Ta bort. Skärmbild som visar hur du tar bort appregistreringen.

Ta bort den externa klientorganisationen

Om du har skapat en ny extern klientorganisation kan du ta bort den. I administrationscentret för Microsoft Entra bläddrar du till Identitetsöversikt>>Hantera klienter.

Välj den klientorganisation som du vill ta bort och välj sedan Ta bort.

Du kan behöva utföra nödvändiga åtgärder innan du kan ta bort klientorganisationen. Du kan till exempel behöva ta bort alla användarflöden och appregistreringar i klientorganisationen.

Om du är redo att ta bort klientorganisationen väljer du Ta bort.

Nästa steg

I den här självstudiekursen lärde du dig att:

  • Bevilja delegerade behörigheter till en webbapp.
  • Anropa Microsoft Graph från en webbapp för en inloggad användare.