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


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

A következőkre vonatkozik: Zöld kör fehér pipa szimbólummal, amely azt jelzi, hogy a következő tartalom a munkaerő-bérlőkre vonatkozik. Munkaerő-bérlők (további információ)

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 lehetőséget biztosít a felhasználó privát interakciójára a Microsoft identitásplatformmal. 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

  • Egy Azure-fiók, aktív előfizetéssel. Hozzon létre egy fiókot ingyenesen. Ennek a fióknak rendelkeznie kell az alkalmazások kezeléséhez szükséges engedélyekkel. Az alkalmazás regisztrálásához használja az alábbi szerepkörök egyikét:
    • Alkalmazásadminisztrátor
    • Alkalmazásfejlesztő
  • Regisztráljon egy új alkalmazást a Microsoft Entra felügyeleti központban, amely csak ebben a szervezeti címtárban lévő fiókokhoz van konfigurálva. További részletekért tekintse meg az alkalmazás regisztrálását . Jegyezze fel a következő értékeket az alkalmazás áttekintési oldaláról későbbi használatra:
    • Alkalmazás (ügyfél) azonosítója
    • Címtár (ügyfél) azonosítója

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

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

Nyelv/ keretrendszer Projekt folyamatban
GitHub
Csomag Megszerzés
elkezdődött
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 könyvtár nem tudja kérni azonosító jogkivonatokat a felhasználói bejelentkezéshez. A kódtár hozzáférési jogkivonatokat kérhet védett webes API-khoz. GA
.NET Microsoft.IdentityModel Microsoft.IdentityModel A könyvtár nem tud azonosító tokeneket 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 GA
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. GA
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. GA
Tavasz 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. GA
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. GA
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. GA
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 elfelejti tömbbé változtatni a Scopes-t, amikor megpróbálja használni a IDownstreamApi-t, a hatókörök null értékűek lesznek, és a IDownstreamApi névtelen (nem hitelesített) hívást kísérel meg a downstream API-hoz, ami egy 401/unauthenticated-t eredményez.

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. A .EnableTokenAcquisitionToCallDownstreamApi() sor .AddMicrosoftIdentityWebApp(Configuration) utáni 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ő. Önnek ténylegesen választania kell egy token gyorsítótár implementálást, például .AddInMemoryTokenCaches(), a Startup.cs-ban:

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 EnableTokenAcquisitionToCallDownstreamApi hatókörök átadása nem kötelező, és lehetővé teszi 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 hozzájuk. 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() után a Startup.cs fájlban. .AddMicrosoftGraph() több felülírási lehetőséggel rendelkezik. 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() után a 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:

Blokkdiagram, amely bemutatja a szolgáltatáskonfigurációs lehetőségeket a startup.cs fájlban a webes API meghívásához és a tokengyorsítótár implementációjának meghatározásához

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. A kliens állítások használata egy haladó forgatókönyv, amit a Client assertions részben részletezünk.

Token-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 token gyorsítótár legyen. Minden fiókhoz serializálnia kell a token gyorsítótárát.

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 tartalmaz előre összeállított token-cache szerializálókat, amint a tokengyorsítótár-szerializálás leírja. É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 gyorsítótár-szolgáltató tokenekkel kapcsolatos részletekért lásd még a Microsoft.Identity.Web tokengyorsítótár-szerializálásról szóló cikkét, valamint az ASP.NET Core webalkalmazás oktatóanyagok | A webalkalmazások oktatóanyagának tokengyorsítótár szakaszát.

Következő lépés

Amikor a felhasználó bejelentkezik, egy token kerül tárolásra a gyorsítótárban. Nézzük meg, hogyan használják a webalkalmazás más részeiben.