Megosztás a következőn keresztül:


Webes API-kat hívó webalkalmazás: Kódkonfiguráció

Az előző cikkben regisztrált egy alkalmazást a Microsoft Entra-ban. Ez a cikk bemutatja, hogyan konfigurálhatja az alkalmazáskódot, és hogyan módosíthatja a webalkalmazást, hogy az ne csak bejelentkezteti a felhasználókat, hanem webes API-kat is hívjon. A létrehozott alkalmazás az OAuth 2.0 engedélyezési kódfolyamatával jelentkezteti be a felhasználót. Ennek a folyamatnak két lépése van:

  1. Engedélyezési kód kérése. Ez a rész privát párbeszédet delegál a felhasználóval a Microsoft Identitásplatform. A párbeszéd során a felhasználó bejelentkezik, és hozzájárul a webes API-k használatához. Ha a privát párbeszéd sikeresen véget ér, a webalkalmazás kap egy engedélyezési kódot az átirányítási URI-n.
  2. Hozzáférési jogkivonat kérése az API-hoz az engedélyezési kód beváltásával.

Előfeltételek

Webalkalmazásokat támogató Microsoft-kódtárak

A következő Microsoft-kódtárak támogatják a webalkalmazásokat:

Nyelv/ keretrendszer Projekt bekapcsolva
GitHub
Csomag Megszerzés
közül
Felhasználók bejelentkezése Webes API-k elérése Általánosan elérhető (GA) vagy
1. nyilvános előzetes verzió
.NET MSAL.NET Microsoft.Identity.Client A tár nem tud azonosító jogkivonatokat kérni a felhasználói bejelentkezéshez. A kódtár hozzáférési jogkivonatokat kérhet védett webes API-khoz. FE
.NET Microsoft.IdentityModel Microsoft.IdentityModel A tár nem tud azonosító jogkivonatokat kérni a felhasználói bejelentkezéshez.2 A tár nem tud hozzáférési jogkivonatokat kérni a védett webes API-khoz.2 FE
ASP.NET Core ASP.NET Core Microsoft.AspNetCore.Authentication Gyors útmutató A kódtár azonosító jogkivonatokat kérhet a felhasználói bejelentkezéshez. A tár nem tud hozzáférési jogkivonatokat kérni a védett webes API-khoz. FE
ASP.NET Core Microsoft.Identity.Web Microsoft.Identity.Web Gyors útmutató A kódtár azonosító jogkivonatokat kérhet a felhasználói bejelentkezéshez. A kódtár hozzáférési jogkivonatokat kérhet védett webes API-khoz. FE
Java MSAL4J msal4j Gyors útmutató A kódtár azonosító jogkivonatokat kérhet a felhasználói bejelentkezéshez. A kódtár hozzáférési jogkivonatokat kérhet védett webes API-khoz. FE
Spring spring-cloud-azure-starter-active-directory spring-cloud-azure-starter-active-directory Oktatóanyag A kódtár azonosító jogkivonatokat kérhet a felhasználói bejelentkezéshez. A kódtár hozzáférési jogkivonatokat kérhet védett webes API-khoz. FE
Node.js MSAL-csomópont msal-node Gyors útmutató A kódtár azonosító jogkivonatokat kérhet a felhasználói bejelentkezéshez. A kódtár hozzáférési jogkivonatokat kérhet védett webes API-khoz. FE
Python MSAL Python msal A kódtár azonosító jogkivonatokat kérhet a felhasználói bejelentkezéshez. A kódtár hozzáférési jogkivonatokat kérhet védett webes API-khoz. FE
Python azonosság azonosság Gyors útmutató A kódtár azonosító jogkivonatokat kérhet a felhasználói bejelentkezéshez. A kódtár hozzáférési jogkivonatokat kérhet védett webes API-khoz. --

(1) Az online szolgáltatásokra vonatkozó univerzális licencfeltételek a nyilvános előzetes verzióban lévő kódtárakra vonatkoznak.

(2) A Microsoft.IdentityModel-kódtár csak a jogkivonatokat érvényesíti – nem tud azonosítókat vagy hozzáférési jogkivonatokat kérni.

Válassza ki a kívánt platform fülét:

Titkos ügyfélkódok vagy ügyféltanúsítványok

Mivel a webalkalmazás most egy alsóbb rétegbeli webes API-t hív meg, adjon meg egy titkos ügyfélkulcsot vagy ügyféltanúsítványt a appsettings.json fájlban. Hozzáadhat egy szakaszt is, amely a következőket adja meg:

  • Az alsóbb rétegbeli webes API URL-címe
  • Az API meghívásához szükséges hatókörök

A következő példában a szakasz ezeket a GraphBeta beállításokat adja meg.

{
  "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"]
    }
}

Feljegyzés

Javasolhat ügyfél-hitelesítő adatok gyűjteményét, beleértve egy hitelesítő adatok nélküli megoldást, például a számítási feladatok identitásának összevonását az Azure Kuberneteshez. A Microsoft.Identity.Web korábbi verziói egyetlen "ClientSecret" tulajdonságban fejezték ki az ügyfélkulcsot az "Ügyfél hitelesítő adatai" helyett. Ez továbbra is támogatott a visszamenőleges kompatibilitás érdekében, de nem használhatja a "ClientSecret" tulajdonságot és az "Ügyfél hitelesítő adatai" gyűjteményt.

Ügyfélkód helyett ügyféltanúsítványt is megadhat. Az alábbi kódrészlet az Azure Key Vaultban tárolt tanúsítvány használatát mutatja be.

{
  "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"]
  }
}

Figyelmeztetés

Ha elfelejt tömbre váltani Scopes , a hatókörök használatakor IDownstreamApi null érték jelenik meg, és IDownstreamApi névtelen (nem hitelesített) hívást kísérel meg az alsóbb rétegbeli API-hoz, ami egy 401/unauthenticated.

A Microsoft.Identity.Web számos módszert kínál a tanúsítványok leírására konfiguráció vagy kód alapján egyaránt. További információ: Microsoft.Identity.Web – Tanúsítványok használata a GitHubon.

A Startup.cs fájl módosítása

A webalkalmazásnak jogkivonatot kell beszereznie az alsóbb rétegbeli API-hoz. Ezt a sort a .EnableTokenAcquisitionToCallDownstreamApi() következő sor .AddMicrosoftIdentityWebApp(Configuration)hozzáadásával adhatja meg: Ez a sor elérhetővé teszi a vezérlőben és az IAuthorizationHeaderProvider oldalműveletekben használható szolgáltatást. Azonban, ahogy az alábbi két lehetőség is látható, egyszerűbben is elvégezhető. A tokengyorsítótár implementálását is ki kell választania, például .AddInMemoryTokenCaches()a 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();
   // ...
  }
  // ...
}

Az átadott EnableTokenAcquisitionToCallDownstreamApi hatókörök nem kötelezőek, és lehetővé teszik a webalkalmazás számára, hogy a bejelentkezéskor kérje a hatóköröket és a felhasználó hozzájárulását ezekhez a hatókörökhöz. Ha nem adja meg a hatóköröket, a Microsoft.Identity.Web növekményes hozzájárulást tesz lehetővé.

A Microsoft.Identity.Web két mechanizmust kínál a webes API webalkalmazásból való meghívására anélkül, hogy jogkivonatot kellene beszereznie. A választott lehetőség attól függ, hogy meghívja-e a Microsoft Graphot vagy egy másik API-t.

1. lehetőség: A Microsoft Graph meghívása

Ha meg szeretné hívni a Microsoft Graphot, a Microsoft.Identity.Web lehetővé teszi a GraphServiceClient (Microsoft Graph SDK által közzétett) közvetlen használatát az API-műveletekben. A Microsoft Graph felfedéséhez:

  1. Adja hozzá a Microsoft.Identity.Web.GraphServiceClient NuGet-csomagot a projekthez.

  2. Adja hozzá .AddMicrosoftGraph() a .EnableTokenAcquisitionToCallDownstreamApi() Startup.cs fájlban. .AddMicrosoftGraph() több felülbírálást is kapott. A konfigurációs szakaszt paraméterként használó felülbírálás használatával a kód a következő lesz:

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

2. lehetőség: A Microsoft Graphtól eltérő alsóbb rétegbeli webes API meghívása

Ha a Microsoft Graphtól eltérő API-t szeretne meghívni, a Microsoft.Identity.Web lehetővé teszi a felület használatát az IDownstreamApi API-műveletekben. A felület használatához:

  1. Adja hozzá a Microsoft.Identity.Web.DownstreamApi NuGet-csomagot a projekthez.

  2. Adja hozzá .AddDownstreamApi() a .EnableTokenAcquisitionToCallDownstreamApi() Startup.cs fájlban. .AddDownstreamApi() két argumentuma van, és az alábbi kódrészletben jelenik meg:

    • A vezérlőműveletek során a megfelelő konfigurációra hivatkozó szolgáltatás (API) neve
    • egy konfigurációs szakasz, amely az alsóbb rétegbeli webes API meghívásához használt paramétereket jelöli.
    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();
       // ...
      }
      // ...
    }
    

Összegzés

A webes API-khoz hasonlóan különböző tokengyorsítótár-implementációkat is választhat. További információ: Microsoft.Identity.Web – Token cache szerializálása a GitHubon.

Az alábbi képen a Microsoft.Identity.Web különböző lehetőségei láthatók, és azok hatása a Startup.cs fájlra:

A szolgáltatáskonfigurációs lehetőségeket bemutató blokkdiagram a webes API meghívásához és a tokengyorsítótár implementációjának megadásához szükséges C S indítási pontban

Feljegyzés

Az itt található kód példák teljes megértéséhez ismernie kell ASP.NET alapvető alapismereteket, és különösen a függőséginjektálást és a lehetőségeket.

Az engedélyezési kódot beváltó kód

A Microsoft.Identity.Web leegyszerűsíti a kódot a megfelelő OpenID Connect-beállítások beállításával, a kapott eseményre való feliratkozással és a kód beváltásával. Az engedélyezési kód beváltásához nincs szükség további kódra. Ennek működésével kapcsolatos részletekért tekintse meg a Microsoft.Identity.Web forráskódját .

Az ügyfélkód helyett a bizalmas ügyfélalkalmazás ügyféltanúsítvány vagy ügyfélérvényesítés használatával is igazolni tudja személyazonosságát. Az ügyfél-állítások használata egy speciális forgatókönyv, amelyet az ügyfél-állítások részleteznek.

Jogkivonat-gyorsítótár

Fontos

A token-cache implementáció webalkalmazások vagy webes API-k esetében eltér az asztali alkalmazások implementációjától, amely gyakran fájlalapú. Biztonsági és teljesítménybeli okokból fontos, hogy a webalkalmazások és webes API-k esetében felhasználói fiókonként egy jogkivonat-gyorsítótár legyen. Minden fiókhoz szerializálnia kell a jogkivonat-gyorsítótárat.

Az ASP.NET alapvető oktatóanyag függőséginjektálást használ annak eldöntéséhez, hogy a tokengyorsítótár implementációja az alkalmazás Startup.cs fájljában van-e. A Microsoft.Identity.Web előre összeállított token-cache szerializálókat tartalmaz, amelyek a tokengyorsítótár-szerializálásban leírtak. Érdekes lehetőség az ASP.NET Core elosztott memóriagyorsítótárak kiválasztása:

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

A jogkivonat-gyorsítótár-szolgáltatókkal kapcsolatos részletekért lásd még a Microsoft.Identity.Web tokengyorsítótár-szerializálási cikkét, valamint a ASP.NET Core webalkalmazás oktatóanyagait | A webalkalmazások oktatóanyagának tokengyorsítótár-fázisa.

Következő lépés

Ezen a ponton, amikor a felhasználó bejelentkezik, a rendszer egy jogkivonatot tárol a jogkivonat-gyorsítótárban. Nézzük meg, hogyan használják a webalkalmazás más részeiben.