Sdílet prostřednictvím


Webová aplikace, která volá webová rozhraní API: Konfigurace kódu

Platí pro: Zelený kruh s bílou zaškrtnutou značkou označuje, že další obsah je určen pro nájemníky z řad pracovní síly. Nájemníci z řad pracovní síly (další informace)

V tomto článku se dozvíte, jak nakonfigurovat kód aplikace a upravit webovou aplikaci tak, aby nejen přihlašuje uživatele, ale také volá webová rozhraní API. Aplikace, kterou vytvoříte, používá tok autorizačního kódu OAuth 2.0 k přihlášení uživatele. Tento tok má dva kroky:

  1. Požádejte o autorizační kód. Tato část deleguje soukromý dialog s uživatelem na platformu Microsoft Identity Platform. Během tohoto dialogu se uživatel přihlásí a souhlasí s používáním webových rozhraní API. Po úspěšném ukončení soukromého dialogu obdrží webová aplikace autorizační kód na identifikátoru URI přesměrování.
  2. Požádejte o přístupový token pro rozhraní API uplatněním autorizačního kódu.

Požadavky

  • Účet Azure s aktivním předplatným. Vytvořte si bezplatný účet. Tento účet musí mít oprávnění ke správě aplikací. K registraci aplikace použijte některou z následujících rolí:
    • Správce aplikace
    • Vývojář aplikací
  • Zaregistrujte novou aplikaci v Centru pro správu Microsoft Entra, která je nakonfigurovaná jenom pro účty v tomto organizačním adresáři. Další podrobnosti najdete v tématu Registrace aplikace . Na stránce Přehled aplikace si poznamenejte následující hodnoty pro pozdější použití:
    • ID aplikace (klienta)
    • ID adresáře (klienta)

Knihovny Microsoftu podporující webové aplikace

Následující knihovny Microsoftu podporují webové aplikace:

Jazyk / architektura Projekt o
GitHub
Balíček Dostání
začal
Přihlášení uživatelů Přístup k webovým rozhraním API Obecná dostupnost (GA) nebo
Veřejná ukázka1
platforma .NET MSAL.NET Microsoft.Identity.Client Knihovna nemůže požádat o tokeny ID pro přihlášení uživatele. Knihovna může požádat o přístupové tokeny pro chráněná webová rozhraní API. GA
platforma .NET Microsoft.IdentityModel Microsoft.IdentityModel Knihovna nemůže požádat o tokeny ID pro přihlášení uživatele. 2 Knihovna nemůže požádat o přístupové tokeny pro chráněná webová rozhraní API. 2 GA
ASP.NET Core Microsoft.Identity.Web Microsoft.Identity.Web Rychlý start Knihovna může požádat o tokeny ID pro přihlášení uživatele. Knihovna může požádat o přístupové tokeny pro chráněná webová rozhraní API. GA
Java MSAL4J msal4j Rychlý start Knihovna může požádat o tokeny ID pro přihlášení uživatele. Knihovna může požádat o přístupové tokeny pro chráněná webová rozhraní API. GA
Jaro spring-cloud-azure-starter-active-directory spring-cloud-azure-starter-active-directory Návod Knihovna může požádat o tokeny ID pro přihlášení uživatele. Knihovna může požádat o přístupové tokeny pro chráněná webová rozhraní API. GA
Node.js Uzel MSAL msal-node Rychlý start Knihovna může požádat o tokeny ID pro přihlášení uživatele. Knihovna může požádat o přístupové tokeny pro chráněná webová rozhraní API. GA
Python MSAL Python msal Knihovna může požádat o tokeny ID pro přihlášení uživatele. Knihovna může požádat o přístupové tokeny pro chráněná webová rozhraní API. GA
Python identita identita Rychlý start Knihovna může požádat o tokeny ID pro přihlášení uživatele. Knihovna může požádat o přístupové tokeny pro chráněná webová rozhraní API. --

(1)Univerzální licenční podmínky pro online služby se vztahují na knihovny ve verzi Public Preview.

(2) Knihovna Microsoft.IdentityModel ověřuje pouze tokeny – nemůže požádat o ID ani přístupové tokeny.

Vyberte kartu pro platformu, kterou vás zajímá:

Tajné klíče klienta nebo klientské certifikáty

Vzhledem k tomu, že vaše webová aplikace teď volá podřízené webové rozhraní API, zadejte tajný klíč klienta nebo klientský certifikát do souboru appsettings.json . Můžete také přidat oddíl, který určuje:

  • Adresa URL podřízeného webového rozhraní API
  • Obory vyžadované pro volání rozhraní API

V následujícím příkladu GraphBeta část určuje tato nastavení.

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "ClientId": "[Enter_the_Application_Id_Here]",
    "TenantId": "common",

   // To call an API
   "ClientCredentials": [
    {
      "SourceType": "ClientSecret",
      "ClientSecret":"[Enter_the_Client_Secret_Here]"
    }
  ]
 },
 "GraphBeta": {
    "BaseUrl": "https://graph.microsoft.com/beta",
    "Scopes": ["user.read"]
    }
}

Poznámka:

Můžete navrhnout kolekci přihlašovacích údajů klienta, včetně řešení bez přihlašovacích údajů, jako je federace identit úloh pro Azure Kubernetes. Předchozí verze Microsoft.Identity.Web vyjádřily tajný klíč klienta v jedné vlastnosti ClientSecret místo ClientCredentials. Tato funkce je stále podporovaná pro zpětnou kompatibilitu, ale nemůžete použít vlastnost ClientSecret i kolekci ClientCredentials.

Místo tajného klíče klienta můžete zadat klientský certifikát. Následující fragment kódu ukazuje použití certifikátu uloženého ve službě Azure Key Vault.

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "ClientId": "[Enter_the_Application_Id_Here]",
    "TenantId": "common",

   // To call an API
   "ClientCredentials": [
      {
        "SourceType": "KeyVault",
        "KeyVaultUrl": "https://msidentitywebsamples.vault.azure.net",
        "KeyVaultCertificateName": "MicrosoftIdentitySamplesCert"
      }
   ]
  },
  "GraphBeta": {
    "BaseUrl": "https://graph.microsoft.com/beta",
    "Scopes": ["user.read"]
  }
}

Varování

Pokud zapomenete změnit Scopes na pole, při pokusu o použití IDownstreamApi se obory zobrazí jako null a IDownstreamApi dojde k pokusu o anonymní (neověřené) volání do podřízeného rozhraní API, což bude mít za následek 401/unauthenticated.

Microsoft.Identity.Web nabízí několik způsobů, jak popsat certifikáty podle konfigurace nebo kódu. Podrobnosti najdete v tématu Microsoft.Identity.Web – Použití certifikátů na GitHubu.

Úprava souboru Startup.cs

Vaše webová aplikace potřebuje získat token pro podřízené rozhraní API. Zadáte to tak, že přidáte řádek .EnableTokenAcquisitionToCallDownstreamApi() za .AddMicrosoftIdentityWebApp(Configuration). Tento řádek zveřejňuje IAuthorizationHeaderProvider službu, kterou můžete použít v kontroleru a akcích stránky. Jak ale vidíte v následujících dvou možnostech, můžete to udělat jednodušeji. Musíte také zvolit implementaci mezipaměti tokenů, například .AddInMemoryTokenCaches()v Startup.cs:

using Microsoft.Identity.Web;

public class Startup
{
  // ...
  public void ConfigureServices(IServiceCollection services)
  {
  // ...
  services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
          .AddMicrosoftIdentityWebApp(Configuration, "AzureAd")
            .EnableTokenAcquisitionToCallDownstreamApi(new string[]{"user.read" })
            .AddInMemoryTokenCaches();
   // ...
  }
  // ...
}

Obory předané EnableTokenAcquisitionToCallDownstreamApi jsou volitelné a umožňují webové aplikaci požadovat obory a souhlas uživatele s těmito obory při přihlášení. Pokud nezadáte obory, Microsoft.Identity.Web povolí přírůstkové vyjádření souhlasu.

Microsoft.Identity.Web nabízí dva mechanismy pro volání webového rozhraní API z webové aplikace, aniž byste museli získat token. Možnost, kterou zvolíte, závisí na tom, jestli chcete volat Microsoft Graph nebo jiné rozhraní API.

Možnost 1: Volání Microsoft Graphu

Pokud chcete volat Microsoft Graph, Microsoft.Identity.Web umožňuje přímo používat GraphServiceClient (vystavené sadou Microsoft Graph SDK) v akcích rozhraní API. Zpřístupnění Microsoft Graphu:

  1. Přidejte do projektu balíček NuGet Microsoft.Identity.Web.GraphServiceClient .

  2. Přidejte .AddMicrosoftGraph() za .EnableTokenAcquisitionToCallDownstreamApi() do souboru Startup.cs. .AddMicrosoftGraph() má několik přednastavení. Pomocí přepsání, které jako parametr přebírá oddíl konfigurace, se kód stane:

    using Microsoft.Identity.Web;
    
    public class Startup
    {
      // ...
      public void ConfigureServices(IServiceCollection services)
      {
      // ...
      services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
              .AddMicrosoftIdentityWebApp(Configuration, "AzureAd")
                .EnableTokenAcquisitionToCallDownstreamApi(new string[]{"user.read" })
                   .AddMicrosoftGraph(Configuration.GetSection("GraphBeta"))
                .AddInMemoryTokenCaches();
       // ...
      }
      // ...
    }
    

Možnost 2: Volání podřízeného webového rozhraní API jiného než Microsoft Graphu

Pokud chcete volat jiné rozhraní než Microsoft Graph, Microsoft.Identity.Web umožňuje používat IDownstreamApi rozhraní v akcích rozhraní API. Chcete-li použít toto rozhraní:

  1. Přidejte do projektu balíček NuGet Microsoft.Identity.Web.DownstreamApi .

  2. Přidejte .AddDownstreamApi() za .EnableTokenAcquisitionToCallDownstreamApi() do souboru Startup.cs. .AddDownstreamApi() má dva argumenty a zobrazuje se v následujícím fragmentu kódu:

    • Název služby (API), která se používá v akcích kontroleru k odkazování na odpovídající konfiguraci
    • oddíl konfigurace představující parametry používané k volání podřízeného webového rozhraní API.
    using Microsoft.Identity.Web;
    
    public class Startup
    {
      // ...
      public void ConfigureServices(IServiceCollection services)
      {
      // ...
      services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
              .AddMicrosoftIdentityWebApp(Configuration, "AzureAd")
                .EnableTokenAcquisitionToCallDownstreamApi(new string[]{"user.read" })
                   .AddDownstreamApi("MyApi", Configuration.GetSection("GraphBeta"))
                .AddInMemoryTokenCaches();
       // ...
      }
      // ...
    }
    

Shrnutí

Stejně jako u webových rozhraní API můžete zvolit různé implementace mezipaměti tokenů. Podrobnosti najdete v tématu Microsoft.Identity.Web – Serializace mezipaměti tokenů na GitHubu.

Následující obrázek ukazuje různé možnosti Microsoft.Identity.Web a jejich vliv na soubor Startup.cs :

Blokový diagram znázorňující možnosti konfigurace služby ve spouštěcí sadě C S pro volání webového rozhraní API a zadání implementace mezipaměti tokenů

Poznámka:

Abyste plně porozuměli příkladům kódu, seznamte se se základy ASP.NET Core a zejména injektážem závislostí a možnostmi.

Kód pro uplatnění autorizačního kódu

Microsoft.Identity.Web zjednodušuje váš kód nastavením správného nastavení OpenID Connect, přihlášením k odběru přijaté události a uplatněním kódu. K uplatnění autorizačního kódu se nevyžaduje žádný další kód. Podrobnosti o tom, jak to funguje, najdete ve zdrojovém kódu Microsoft.Identity.Web.

Místo tajného klíče klienta může důvěrná klientská aplikace také prokázat svou identitu pomocí klientského certifikátu nebo klientského kontrolního výrazu. Použití klientských kontrolních výrazů je pokročilý scénář podrobně popsaný v klientských kontrolních výrazech.

Mezipaměť tokenů

Důležité

Implementace mezipaměti tokenů pro webové aplikace nebo webová rozhraní API se liší od implementace desktopových aplikací, což je často založené na souborech. Z důvodů zabezpečení a výkonu je důležité zajistit, aby pro webové aplikace a webová rozhraní API byla jedna mezipaměť tokenů na uživatelský účet. Pro každý účet je nutné serializovat mezipaměť tokenů.

Kurz ASP.NET Core používá injektáž závislostí, což vám umožňuje rozhodnout se o implementaci mezipaměti tokenů v souboru Startup.cs pro vaši aplikaci. Microsoft.Identity.Web obsahuje předem sestavené serializátory token-cache popsané v serializaci mezipaměti tokenů. Zajímavou možností je zvolit distribuované paměťové mezipaměti ASP.NET Core.

// Use a distributed token cache by adding:
    services.AddMicrosoftIdentityWebAppAuthentication(Configuration, "AzureAd")
            .EnableTokenAcquisitionToCallDownstreamApi(
                initialScopes: new string[] { "user.read" })
            .AddDistributedTokenCaches();

// Then, choose your implementation.
// For instance, the distributed in-memory cache (not cleared when you stop the app):
services.AddDistributedMemoryCache();

// Or a Redis cache:
services.AddStackExchangeRedisCache(options =>
{
 options.Configuration = "localhost";
 options.InstanceName = "SampleInstance";
});

// Or even a SQL Server token cache:
services.AddDistributedSqlServerCache(options =>
{
 options.ConnectionString = _config["DistCache_ConnectionString"];
 options.SchemaName = "dbo";
 options.TableName = "TestCache";
});

Podrobnosti o poskytovatelích mezipaměti tokenů najdete v článku o serializaci mezipaměti tokenů v Microsoft.Identity.Web a v kurzech webových aplikací ASP.NET Core | Fáze ukládání mezipaměti tokenů v rámci tutoriálu webových aplikací.

Další krok

Když se uživatel přihlásí, v tomto okamžiku se token uloží do mezipaměti tokenů. Pojďme se podívat, jak se pak používá v jiných částech webové aplikace.