Kurz: Přístup k Microsoft Graphu ze zabezpečené aplikace .NET jako uživatel

Zjistěte, jak získat přístup k Microsoft Graphu z webové aplikace spuštěné ve službě Aplikace Azure Service.

Diagram that shows accessing Microsoft Graph.

Chcete přidat přístup k Microsoft Graphu z webové aplikace a provést nějakou akci jako přihlášený uživatel. Tato část popisuje, jak udělit delegovaná oprávnění webové aplikaci a získat informace o profilu přihlášeného uživatele z ID Microsoft Entra.

V tomto kurzu se naučíte:

  • Udělte delegovaná oprávnění webové aplikaci.
  • Volání Microsoft Graphu z webové aplikace pro přihlášeného uživatele

Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet Azure před tím, než začnete.

Předpoklady

  • Webová aplikace spuštěná ve službě Aplikace Azure, která má povolený modul ověřování/autorizace služby App Service.

Udělení přístupu front-endu pro volání Microsoft Graphu

Teď, když jste povolili ověřování a autorizaci ve webové aplikaci, je webová aplikace zaregistrovaná na platformě Microsoft Identity Platform a je založená na aplikaci Microsoft Entra. V tomto kroku udělíte webové aplikaci oprávnění pro přístup k Microsoft Graphu pro uživatele. (Technicky vzato udělíte aplikaci Microsoft Entra webové aplikace oprávnění pro přístup k aplikaci Microsoft Graph Microsoft Entra pro uživatele.)

  1. V Centru pro správu Microsoft Entra vyberte Aplikace.

  2. Vyberte Registrace aplikací> Owned applications>View all applications in this directory. Vyberte název webové aplikace a pak vyberte oprávnění rozhraní API.

  3. Vyberte Přidat oprávnění a pak vyberte Rozhraní MICROSOFT API a Microsoft Graph.

  4. Vyberte Delegovaná oprávnění a pak v seznamu vyberte User.Read . Vyberte Přidat oprávnění.

Konfigurace služby App Service tak, aby vracela použitelný přístupový token

Webová aplikace teď má požadovaná oprávnění pro přístup k Microsoft Graphu jako přihlášený uživatel. V tomto kroku nakonfigurujete ověřování a autorizaci služby App Service, abyste získali použitelný přístupový token pro přístup k Microsoft Graphu. V tomto kroku musíte přidat obor User.Read pro podřízenou službu (Microsoft Graph): https://graph.microsoft.com/User.Read.

Důležité

Pokud službu App Service nenakonfigurujete tak, aby vracela použitelný přístupový token, při volání rozhraní Microsoft Graph API v kódu se zobrazí CompactToken parsing failed with error code: 80049217 chyba.

Přejděte do Azure Resource Exploreru a pomocí stromu prostředků vyhledejte webovou aplikaci. Adresa URL prostředku by měla být podobná https://resources.azure.com/subscriptions/subscriptionId/resourceGroups/SecureWebApp/providers/Microsoft.Web/sites/SecureWebApp20200915115914.

Průzkumník prostředků Azure se teď otevře s webovou aplikací vybranou ve stromu prostředků.

  1. V horní části stránky vyberte Čtení a zápis , abyste povolili úpravy prostředků Azure.

  2. V levém prohlížeči přejděte k podrobnostem o konfiguraci>authsettingsV2.

  3. V zobrazení authsettingsV2 vyberte Upravit.

  4. Vyhledejte část přihlášení identityProviders ->azureActiveDirectory a přidejte následující nastavení 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. Nastavení uložte tak, že vyberete PUT. Toto nastavení může trvat několik minut, než se projeví. Vaše webová aplikace je teď nakonfigurovaná pro přístup k Microsoft Graphu se správným přístupovým tokenem. Pokud ne, Vrátí Microsoft Graph chybu s informací, že formát kompaktního tokenu je nesprávný.

Volání Microsoft Graphu pomocí .NET

Vaše webová aplikace teď má požadovaná oprávnění a také přidá ID klienta Microsoft Graphu do parametrů přihlášení.

Pomocí knihovny Microsoft.Identity.Web získá webová aplikace přístupový token pro ověřování pomocí Microsoft Graphu. Ve verzi 1.2.0 a novější se knihovna Microsoft.Identity.Web integruje a může běžet společně s modulem ověřování/autorizace služby App Service. Microsoft.Identity.Web zjistí, že je webová aplikace hostovaná ve službě App Service, a získá přístupový token z modulu ověřování/autorizace služby App Service. Přístupový token se pak předá ověřeným požadavkům pomocí rozhraní Microsoft Graph API.

Pokud chcete tento kód zobrazit jako součást ukázkové aplikace, podívejte se na:

Poznámka:

Knihovna Microsoft.Identity.Web není ve webové aplikaci nutná k základnímu ověřování nebo autorizaci ani k ověřování požadavků v Microsoft Graphu. Podřízená rozhraní API je možné bezpečně volat pouze s povoleným modulem ověřování a autorizace služby App Service.

Ověřování/autorizace služby App Service je ale navržené pro další základní scénáře ověřování. Pro složitější scénáře (zpracování vlastních deklarací identity, například) potřebujete knihovnu Microsoft.Identity.Web nebo Microsoft Authentication Library. Na začátku je k dispozici trochu více nastavení a konfigurace, ale knihovna Microsoft.Identity.Web může běžet společně s modulem ověřování/autorizace služby App Service. Později, když vaše webová aplikace potřebuje zpracovat složitější scénáře, můžete zakázat modul ověřování/autorizace služby App Service a Microsoft.Identity.Web už bude součástí vaší aplikace.

Instalace balíčků klientské knihovny

Nainstalujte balíčky NuGet Microsoft.Identity.Web a Microsoft.Identity.Web.MicrosoftGraph v projektu pomocí rozhraní příkazového řádku .NET Core nebo konzoly Správce balíčků v sadě Visual Studio.

Příkazový řádek .NET Core

Otevřete příkazový řádek a přepněte do adresáře, který obsahuje váš soubor projektu.

Spusťte příkazy instalace.

dotnet add package Microsoft.Identity.Web.MicrosoftGraph

dotnet add package Microsoft.Identity.Web

Konzola Správce balíčků

Otevřete projekt nebo řešení v sadě Visual Studio a otevřete konzolu pomocí příkazu Nástroje>NuGet Správce balíčků> Správce balíčků Konzola.

Spusťte příkazy instalace.

Install-Package Microsoft.Identity.Web.GraphServiceClient

Install-Package Microsoft.Identity.Web

Startup.cs

V souboru AddMicrosoftIdentityWebApp Startup.cs metoda přidá Microsoft.Identity.Web do vaší webové aplikace. Metoda AddMicrosoftGraph přidá podporu Microsoft Graphu. Informace o správě přírůstkového souhlasu a podmíněného přístupu najdete v tomto článku.

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 určuje konfiguraci pro knihovnu Microsoft.Identity.Web. V Centru pro správu Microsoft Entra vyberte aplikace z nabídky portálu a pak vyberte Registrace aplikací. Vyberte registraci aplikace vytvořenou při povolení modulu ověřování/autorizace služby App Service. (Registrace aplikace by měla mít stejný název jako vaše webová aplikace.) ID tenanta a ID klienta najdete na stránce s přehledem registrace aplikace. Název domény najdete na stránce přehledu Microsoft Entra pro vašeho tenanta.

Graph určuje koncový bod Microsoft Graphu a počáteční obory, které aplikace potřebuje.

{
  "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": "*"
}

Volání Microsoft Graphu jménem uživatele

Následující příklad ukazuje, jak volat Microsoft Graph jako přihlášeného uživatele a získat některé informace o uživateli. Objekt GraphServiceClient se vloží do kontroleru a ověřování za vás nakonfiguruje knihovna Microsoft.Identity.Web.

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

Vyčištění prostředků

Pokud jste dokončili všechny kroky v tomto vícedílovém kurzu, vytvořili jste službu App Service, plán hostování služby App Service a účet úložiště ve skupině prostředků. Také jste vytvořili registraci aplikace v Microsoft Entra ID. Pokud už je nepotřebujete, odstraňte tyto prostředky a registraci aplikace, abyste dál nenabídli poplatky.

V tomto kurzu se naučíte:

  • Odstraňte prostředky Azure vytvořené během kurzu.

Odstranění skupiny prostředků

Na webu Azure Portal vyberte v nabídce portálu skupiny prostředků a vyberte skupinu prostředků, která obsahuje vaši službu App Service a plán služby App Service.

Výběrem možnosti Odstranit skupinu prostředků odstraňte skupinu prostředků a všechny prostředky.

Screenshot that shows deleting the resource group.

Spuštění tohoto příkazu může trvat několik minut.

Odstranění registrace aplikace

V Centru pro správu Microsoft Entra vyberte Aplikace> Registrace aplikací. Pak vyberte aplikaci, kterou jste vytvořili. Screenshot that shows selecting app registration.

V přehledu registrace aplikace vyberte Odstranit. Screenshot that shows deleting the app registration.

Další kroky

V tomto kurzu jste se naučili, jak:

  • Udělte delegovaná oprávnění webové aplikaci.
  • Volání Microsoft Graphu z webové aplikace pro přihlášeného uživatele