Sdílet prostřednictvím


Kurz: Přístup k Microsoft Graphu ze zabezpečené aplikace 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 znázorňující přístup k Microsoft Graphu

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.

Požadavky

  • 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.)

V nabídce Centra pro správu Microsoft Entra vyberte Aplikace.

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

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

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ů. V horní části stránky vyberte Čtení a zápis , abyste povolili úpravy prostředků Azure.

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

V zobrazení authsettingsV2 vyberte Upravit. 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"
        ]
      }
    }
  }
},

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

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 ukázku na GitHubu.

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.GraphServiceClient v projektu pomocí rozhraní příkazového řádku .NET (CLI) nebo konzoly Správce balíčků v sadě Visual Studio.

.NET CLI

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.GraphServiceClient

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á do webové aplikace Microsoft.Identity.Web. Metoda AddMicrosoftGraph přidá podporu Microsoft Graphu.

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

ID Microsoft Entra 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 Entra admin center. Select 'Endpoints' from the 'App registrations' blade and use the GUID in any of the URLs), e.g. aaaabbbb-0000-cccc-1111-dddd2222eeee]",
    "ClientId": "[Enter the Client Id (Application ID obtained from the Microsoft Entra admin center), e.g. 00001111-aaaa-2222-bbbb-3333cccc4444]",
    "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": "*"
}

Index.cshtml.cs

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.

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 tento kurz a už nepotřebujete webovou aplikaci nebo přidružené prostředky, vyčistěte prostředky, které jste vytvořili.

Další kroky