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

Jak je vidět ve scénáři webové aplikace, která přihlašovat uživatele, používá webová aplikace k přihlášení uživatele tok autorizačního kódu OAuth 2.0. Tento tok má dva kroky:

  1. Vyžádejte si autorizační kód. Tato část deleguje soukromý dialog s uživatelem na 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 s identifikátorem URI přesměrování.
  2. Požádejte o přístupový token pro rozhraní API uplatněním autorizačního kódu.

Webová aplikace, která se přihlásí k uživatelům, pokryla pouze první krok. Tady se dozvíte, jak upravit webovou aplikaci tak, aby nejen podepisuje uživatele, ale také teď volal webová rozhraní API.

Knihovny Microsoftu podporující webové aplikace

Webové aplikace podporují následující knihovny Microsoftu:

Jazyk/rozhraní Project na
GitHubu
Balíček Úvod
Začínáme
Přihlášení uživatelů Přístup k webovým rozhraním API Všeobecně dostupná (GA) nebo
Verze 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žadovat 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 žádat přístupové tokeny pro chráněná webová rozhraní API. 2 . GA
ASP.NET Core ASP.NET Bezpečnost Microsoft.AspNetCore.Authentication Rychlý start Knihovna může vyžádat tokeny ID pro přihlášení uživatele. Knihovna nemůže žádat přístupové tokeny pro chráněná webová rozhraní API. GA
ASP.NET Core Microsoft. identity. Web Microsoft. identity. Web Rychlý start Knihovna může vyžádat tokeny ID pro přihlášení uživatele. Knihovna může požadovat přístupové tokeny pro chráněná webová rozhraní API. GA
Java MSAL4J msal4j Rychlý start Knihovna může vyžádat tokeny ID pro přihlášení uživatele. Knihovna může požadovat přístupové tokeny pro chráněná webová rozhraní API. GA
Node.js Uzel MSAL msal – uzel Rychlý start Knihovna může vyžádat tokeny ID pro přihlášení uživatele. Knihovna může požadovat přístupové tokeny pro chráněná webová rozhraní API. GA
Python MSAL Python msal Rychlý start Knihovna může vyžádat tokeny ID pro přihlášení uživatele. Knihovna může požadovat přístupové tokeny pro chráněná webová rozhraní API. GA

1 dodatečné podmínky použití pro Microsoft Azure preview se vztahují na knihovny ve verzi Public preview.

2 knihovna Microsoft. IdentityModel ověřuje pouze tokeny – nemůže žádat o ID nebo přístupové tokeny.

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

Tajné kódy klienta nebo klientské certifikáty

Vzhledem k tomu, že vaše webová aplikace teď volá podřízené webové rozhraní API, zadejte tajný kód klienta nebo klientský certifikát v 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 oddíl určuje tato nastavení.

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "ClientId": "[Client_id-of-web-app-eg-2ec40e65-ba09-4853-bcde-bcb60029e596]",
    "TenantId": "common"

   // To call an API
   "ClientSecret": "[Copy the client secret added to the app from the Azure portal]",
   "ClientCertificates": [
  ]
 },
 "GraphBeta": {
    "BaseUrl": "https://graph.microsoft.com/beta",
    "Scopes": "user.read"
    }
}

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

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "ClientId": "[Client_id-of-web-app-eg-2ec40e65-ba09-4853-bcde-bcb60029e596]",
    "TenantId": "common"

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

Microsoft.Identity.Web nabízí několik způsobů popisu certifikátů, a to jak pomocí konfigurace, tak kódu. Podrobnosti najdete v tématu Microsoft.Identity.Web – používání certifikátů v GitHub.

Startup.cs

Vaše webová aplikace bude muset získat token pro podřízené rozhraní API. Zadáte ho přidáním .EnableTokenAcquisitionToCallDownstreamApi() řádku za .AddMicrosoftIdentityWebApi(Configuration) . Tento řádek zpřístupňuje ITokenAcquisition službu, kterou můžete použít v kontroleru a akcích stránky. Jak ale uvidíte v následujících dvou možnostech, můžete to udělat jednodušeji. Budete také muset zvolit implementaci mezipaměti tokenů, například .AddInMemoryTokenCaches() v souboru 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é do jsou volitelné a umožňují webové aplikaci požadovat obory a souhlas uživatele s těmito obory při EnableTokenAcquisitionToCallDownstreamApi přihlášení. Pokud nezadáte obory, Microsoft.Identity.Web povolí prostředí přírůstkového souhlasu.

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

Možnost 1: Volání microsoft Graph

Pokud chcete volat Microsoft Graph, Microsoft.Identity.Web vám umožní přímo používat rozhraní (vystavené sadou GraphServiceClient Microsoft Graph SDK) ve vašich akcích rozhraní API. Vystavení microsoft Graph:

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

  2. Do .AddMicrosoftGraph() souboru .EnableTokenAcquisitionToCallDownstreamApi() Startup.cs přidejte after. .AddMicrosoftGraph() má několik přepsání. Použitím přepsání, které jako parametr přebírá konfigurační oddíl, se kód změní na:

    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í jiného podřízeného webového rozhraní API než Microsoft Graph

K volání jiného webového rozhraní API než Microsoft Graph poskytuje Microsoft.Identity.Web , který požaduje tokeny a .AddDownstreamWebApi() volá podřízené webové 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" })
               .AddDownstreamWebApi("MyApi", Configuration.GetSection("GraphBeta"))
            .AddInMemoryTokenCaches();
   // ...
  }
  // ...
}

Souhrn

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

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

Blokový diagram znázorňující možnosti konfigurace služby v jazyce CS při spuštění pro volání webového rozhraní API a zadání implementace mezipaměti tokenů

Poznámka

Pokud chcete plně porozumět příkladům kódu, seznamte se ASP.NET Corezáklady a zejména s injektáží 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 OpenID Připojení, přihlášením k odběru události přijatého kódu 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 v tématu Zdrojový kód Microsoft.Identity.Web.

Místo tajného klíče klienta může důvěrná klientská aplikace také prokázat svoji 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ě probý klientskými kontrolními výrazy.

Mezipaměť tokenů

Důležité

Implementace mezipaměti tokenů pro webové aplikace nebo webová rozhraní API se liší od implementace pro desktopové aplikace, která 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 k dispozici jedna mezipaměť tokenů na uživatelský účet. Mezipaměť tokenů je nutné serializovat pro každý účet.

kurz ASP.NET core používá vkládání závislostí, které umožňuje určit implementaci mezipaměti tokenů v souboru Startup. cs pro vaši aplikaci. Microsoft. identity. Web přichází s předem vytvořenými serializátory mezipaměti tokenů, které jsou popsané v tématu serializace mezipaměti tokenů. zajímavou možností je zvolit ASP.NET Core distribuované mezipaměti paměti:

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

podrobné informace o poskytovatelích mezipaměti tokenů najdete v článku také o Microsoft. Identity. Web na serializaci mezipaměti tokenů a v kurzech ASP.NET Core web app | Fáze mezipamětí tokenů v kurzu Web Apps.

Další kroky

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

Odebrání účtů z mezipaměti při globálním odhlašování