Sdílet prostřednictvím


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

V předchozím článku jste zaregistrovali aplikaci v Microsoft Entra. 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

Knihovny Microsoftu podporující webové aplikace

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

Jazyk / architektura Project on
GitHub
Balíček Dostání
z těchto možností
Přihlášení uživatelů Přístup k webovým rozhraním API Obecná dostupnost (GA) nebo
Public Preview1
.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
.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
Spring spring-cloud-azure-starter-active-directory spring-cloud-azure-starter-active-directory Kurz 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"]
  }
}

Upozorňující

Pokud zapomenete změnit Scopes pole, při pokusu o použití IDownstreamApi oborů se zobrazí hodnota null a IDownstreamApi pokusíte se anonymní (neověřené) volání do podřízeného rozhraní API, což bude mít za 401/unauthenticatednásledek .

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 ho .EnableTokenAcquisitionToCallDownstreamApi() přidáním řádku 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. Zveřejnění Microsoft Graphu:

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

  2. Přidejte .AddMicrosoftGraph() za .EnableTokenAcquisitionToCallDownstreamApi() soubor Startup.cs . .AddMicrosoftGraph() má několik přepsání. 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() soubor 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, který uplatní autorizační kód

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 jádra používá injektáž závislostí, abyste mohli rozhodnout 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ímavá možnost je zvolit ASP.NET mezipaměti distribuované paměti 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ů microsoft.Identity.Web a kurzech k webové aplikaci ASP.NET Core | Fáze ukládání tokenů do mezipaměti kurzu 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.