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

A webes API-regisztráció befejezése után az alkalmazáskód konfigurálható. Ha webes API-t konfigurál egy alsóbb rétegbeli webes API meghívására, az a webes API védelméhez használt kódra épül. További információ: Védett webes API: Alkalmazáskonfiguráció.

Microsoft.Identity.Web

A Microsoft azt javasolja, hogy használja a Microsoft.Identity.Web NuGet-csomagot egy ASP.NET Core által védett API fejlesztésekor, amely alsóbb rétegbeli webes API-kat hív meg. Lásd: Védett webes API: Kódkonfiguráció | A Microsoft.Identity.Web segítségével gyorsan bemutatható a kódtár egy webes API kontextusában.

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.

Program.cs

using Microsoft.Identity.Web;

// ...
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApi(Configuration, Configuration.GetSection("AzureAd"))
    .EnableTokenAcquisitionToCallDownstreamApi()
    .AddInMemoryTokenCaches();
// ...

A webes API-nak jogkivonatot kell beszereznie az alsóbb rétegbeli API-hoz. Adja meg a következő sor .AddMicrosoftIdentityWebApi(Configuration)hozzáadásával.EnableTokenAcquisitionToCallDownstreamApi(): . Ez a sor elérhetővé teszi a ITokenAcquisition vezérlő/oldalak műveleteiben használható szolgáltatást.

Egy másik módszer azonban a tokengyorsítótár implementálása. Például a Program.cs hozzáadása .AddInMemoryTokenCaches()lehetővé teszi, hogy a jogkivonat gyorsítótárazva legyen a memóriában.

using Microsoft.Identity.Web;

// ...
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApi(Configuration, Configuration.GetSection("AzureAd"))
    .EnableTokenAcquisitionToCallDownstreamApi()
    .AddInMemoryTokenCaches();
// ...

A Microsoft.Identity.Web két mechanizmust biztosít egy lefelé irányuló webes API meghívására egy másik API-ból. 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

A Microsoft Graph meghívásához 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.

Feljegyzés

A Microsoft Graph SDK v5+-jával kapcsolatos probléma jelenleg is fennáll. További információ: GitHub-probléma.

A Microsoft Graph felfedéséhez:

  1. Adja hozzá a Microsoft.Identity.Web.GraphServiceClient NuGet-csomagot a projekthez.
  2. Add .AddMicrosoftGraph() after .EnableTokenAcquisitionToCallDownstreamApi() in Program.cs. .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;

// ...
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApi(Configuration, Configuration.GetSection("AzureAd"))
    .EnableTokenAcquisitionToCallDownstreamApi()
    .AddMicrosoftGraph(Configuration.GetSection("GraphBeta"))
    .AddInMemoryTokenCaches();
// ...

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

  1. Adja hozzá a Microsoft.Identity.Web.DownstreamApi NuGet-csomagot a projekthez.
  2. Add .AddDownstreamApi() after .EnableTokenAcquisitionToCallDownstreamApi() in Program.cs. A kód a következő lesz:
using Microsoft.Identity.Web;

// ...
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApi(Configuration, "AzureAd")
    .EnableTokenAcquisitionToCallDownstreamApi()
    .AddDownstreamApi("MyApi", Configuration.GetSection("MyApiScope"))
    .AddInMemoryTokenCaches();
// ...

Ahol;

  • MyApi a webes API által meghívni kívánt alsóbb rétegbeli webes API nevét jelöli
  • MyApiScope a webes API kéréséhez szükséges hatókör az alsóbb rétegbeli webes API-val való interakcióhoz

Ezek az értékek az alábbi kódrészlethez hasonló JSON-fájlban jelennek meg.

"DownstreamAPI": {
      "BaseUrl": "https://downstreamapi.contoso.com/",
      "Scopes": "user.read"
    },

Ha a webalkalmazásnak másik API-erőforrást kell meghívnia, ismételje meg a .AddDownstreamApi() metódust a megfelelő hatókörrel, ahogyan az alábbi kódrészletben látható:

using Microsoft.Identity.Web;

// ...
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApi(Configuration, "AzureAd")
    .EnableTokenAcquisitionToCallDownstreamApi()
    .AddDownstreamApi("MyApi", Configuration.GetSection("MyApiScope"))
    .AddDownstreamApi("MyApi2", Configuration.GetSection("MyApi2Scope"))
    .AddInMemoryTokenCaches();
// ...

Vegye figyelembe, hogy .EnableTokenAcquisitionToCallDownstreamApi a meghívás paraméter nélkül történik, ami azt jelenti, hogy a hozzáférési jogkivonat éppen időben lesz beolvasva, amikor a vezérlő a hatókör megadásával kéri a jogkivonatot.

A hatókör híváskor .EnableTokenAcquisitionToCallDownstreamApiis átadható, így a webalkalmazás a kezdeti felhasználói bejelentkezés során szerezné be a jogkivonatot. Ezt követően a rendszer lekéri a jogkivonatot a gyorsítótárból, amikor a vezérlő kéri.

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

Az alábbi képen a Microsoft.Identity.Web lehetőségei és a Program.cs gyakorolt hatás látható:

Block diagram showing service configuration options in startup dot C S for calling a web API and specifying a token cache implementation

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.

A Node.js és az Azure Functions OBO-folyamat implementálására is láthat példát.

Protokoll

Az OBO protokollról további információt a Microsoft Identitásplatform és az OAuth 2.0 On-Behalf-Of folyamatában talál.

Következő lépések

Lépjen tovább ebben a forgatókönyvben a következő cikkre, és szerezze be az alkalmazás jogkivonatát.