Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
              Gäller för:  Personalklienter (läs mer)
 Personalklienter (läs mer)
Den här artikeln beskriver hur du konfigurerar kod för en webb-API-app med hjälp av OAuth 2.0-auktoriseringskodflödet.
Microsoft rekommenderar att du använder NuGet-paketet Microsoft.Identity.Web när du utvecklar ett ASP.NET Core-skyddat API som anropar underordnade webb-API:er. Se Skyddat webb-API: Kodkonfiguration | Microsoft.Identity.Web för en snabb presentation av biblioteket i kontexten för ett webb-API.
Förutsättningar
- Ett Azure-konto med en aktiv prenumeration. 
              Skapa ett konto kostnadsfritt. Det här kontot måste ha behörighet att hantera program. Använd någon av följande roller som behövs för att registrera programmet: - Appadministratör
- Programutvecklare
 
- Registrera en ny app i administrationscentret för Microsoft Entra, som endast konfigurerats för konton i den här organisationskatalogen. Mer information finns i Registrera ett program . Registrera följande värden från programöversiktssidan för senare användning: - App-ID (klient-ID)
- Katalog-ID (hyresgäst)
 
- Lägg till ett klientcertifikat i appregistreringen. Mer information finns i Lägga till och hantera programautentiseringsuppgifter i Microsoft Entra-ID.
Konfigurera appen
Välj ett språk för webb-API:et.
Klienthemligheter eller klientcertifikat
Eftersom webbappen nu anropar ett underordnat webb-API anger du en klienthemlighet eller ett klientcertifikat i appsettings.json-filen. Du kan också lägga till ett avsnitt som anger:
- URL:en för det underordnade webb-API:et
- De omfång som krävs för att anropa API:et
I följande exempel anger avsnittet GraphBeta dessa inställningar.
{
  "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"]
    }
}
Kommentar
Du kan föreslå en samling av klientautentiseringsuppgifter, inklusive en lösning utan traditionella autentiseringsuppgifter, såsom arbetslastidentitetsfederation för Azure Kubernetes. Tidigare versioner av Microsoft.Identity.Web uttryckte klienthemligheten i en enda egenskap "ClientSecret" i stället för "ClientCredentials". Detta stöds fortfarande för bakåtkompatibilitet, men du kan inte använda både egenskapen "ClientSecret" och samlingen "ClientCredentials".
I stället för en klienthemlighet kan du ange ett klientcertifikat. Följande kodfragment visar hur du använder ett certifikat som lagras i 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"]
  }
}
Varning
Om du glömmer att ändra Scopes till en matris, kommer omfången att visas som null när du försöker använda IDownstreamApi, och IDownstreamApi kommer att göra ett anonymt (oautentiserat) anrop till det underordnade API:et, vilket resulterar i ett 401/unauthenticated.
Microsoft.Identity.Web innehåller flera sätt att beskriva certifikat, både efter konfiguration eller kod. Mer information finns i Microsoft.Identity.Web – Använda certifikat på GitHub.
Program.cs
using Microsoft.Identity.Web;
// ...
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApi(Configuration, Configuration.GetSection("AzureAd"))
    .EnableTokenAcquisitionToCallDownstreamApi()
    .AddInMemoryTokenCaches();
// ...
Ett webb-API måste hämta en token för det underordnade API:et. Ange den genom att lägga till .EnableTokenAcquisitionToCallDownstreamApi() raden efter .AddMicrosoftIdentityWebApi(Configuration). Den här raden exponerar tjänsten ITokenAcquisition som kan användas i åtgärder för kontroller/sidor.
En alternativ metod är dock att implementera en tokencache. Om du till exempel lägger till .AddInMemoryTokenCaches(), i Program.cs kan token cachelagras i minnet.
using Microsoft.Identity.Web;
// ...
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApi(Configuration, Configuration.GetSection("AzureAd"))
    .EnableTokenAcquisitionToCallDownstreamApi()
    .AddInMemoryTokenCaches();
// ...
Microsoft.Identity.Web innehåller två mekanismer för att anropa ett underordnat webb-API från ett annat API. Vilket alternativ du väljer beror på om du vill anropa Microsoft Graph eller något annat API.
Alternativ 1: Anropa Microsoft Graph
Om du vill anropa Microsoft Graph gör Microsoft.Identity.Web att du kan använda GraphServiceClient (exponerad av Microsoft Graph SDK) direkt i API-åtgärderna.
Kommentar
Det finns ett pågående problem för Microsoft Graph SDK v5+. Mer information finns i GitHub-problemet.
Så här exponerar du Microsoft Graph:
- Lägg till NuGet-paketet Microsoft.Identity.Web.GraphServiceClient i projektet.
- Lägg till .AddMicrosoftGraph()efter.EnableTokenAcquisitionToCallDownstreamApi()i Program.cs..AddMicrosoftGraph()har flera överskrivningar. Med hjälp av metoden för åsidosättning som tar ett konfigurationsavsnitt som en parameter blir koden:
using Microsoft.Identity.Web;
// ...
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApi(Configuration, Configuration.GetSection("AzureAd"))
    .EnableTokenAcquisitionToCallDownstreamApi()
    .AddMicrosoftGraph(Configuration.GetSection("GraphBeta"))
    .AddInMemoryTokenCaches();
// ...
Alternativ 2: Anropa ett annat underordnat webb-API än Microsoft Graph
- Lägg till NuGet-paketet Microsoft.Identity.Web.DownstreamApi i projektet.
- Lägg till .AddDownstreamApi()efter.EnableTokenAcquisitionToCallDownstreamApi()i Program.cs. Koden blir:
using Microsoft.Identity.Web;
// ...
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApi(Configuration, "AzureAd")
    .EnableTokenAcquisitionToCallDownstreamApi()
    .AddDownstreamApi("MyApi", Configuration.GetSection("MyApiScope"))
    .AddInMemoryTokenCaches();
// ...
var;
- 
              MyApianger namnet på det underordnade webb-API:et som ditt webb-API avser att anropa
- 
              MyApiScopeär det omfång som behövs för att ditt webb-API ska kunna göra förfrågningar för att interagera med det underordnade webb-API:et
Dessa värden representeras i din JSON som liknar följande kodfragment.
"DownstreamAPI": {
      "BaseUrl": "https://downstreamapi.contoso.com/",
      "Scopes": "user.read"
    },
Om webbappen behöver anropa en annan API-resurs upprepar du .AddDownstreamApi() metoden med relevant omfång enligt följande kodfragment:
using Microsoft.Identity.Web;
// ...
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApi(Configuration, "AzureAd")
    .EnableTokenAcquisitionToCallDownstreamApi()
    .AddDownstreamApi("MyApi", Configuration.GetSection("MyApiScope"))
    .AddDownstreamApi("MyApi2", Configuration.GetSection("MyApi2Scope"))
    .AddInMemoryTokenCaches();
// ...
Observera att .EnableTokenAcquisitionToCallDownstreamApi anropas utan någon parameter, vilket innebär att åtkomsttoken hämtas precis i tid när kontrollanten begär token genom att ange omfånget.
Omfånget kan också skickas när du anropar .EnableTokenAcquisitionToCallDownstreamApi, vilket gör att webbappen hämtar token under den första användarinloggningen. Token hämtas sedan från cacheminnet när kontrollanten begär den.
På samma sätt som med webbappar kan du välja olika implementeringar av tokencache. Mer information finns i Microsoft identity web – Token cache serialization on GitHub (Microsoft identity web – Token cache serialization on GitHub).
Följande bild visar möjligheterna med Microsoft.Identity.Web och påverkan på Program.cs:
              
              
              
              
            
Kommentar
Om du vill förstå kodexemplen fullt ut här bör du känna till grunderna för ASP.NET Core, särskilt beroendeinmatning och alternativ.
Du kan också se ett exempel på implementering av OBO-flöde i Node.js och Azure Functions.
Protokoll
Mer information om OBO-protokollet finns i Microsofts identitetsplattform och OAuth 2.0-flödet On-Behalf-Of.