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)
Förstå hur du konfigurerar koden för ditt skyddade webb-API:
- Vad definierar API:er som skyddade.
- Så här konfigurerar du en ägartoken.
- Verifiera token.
Godkänd tokenversion
Microsofts identitetsplattform kan utfärda v1.0-token och v2.0-token. Mer information om dessa token finns i Åtkomsttoken.
Vilken tokenversion ditt API kan acceptera beror på valet av kontotyper som stöds när du skapar din webb-API-programregistrering i Azure Portal.
- Om värdet för Kontotyper som stöds är Konton i en organisationskatalog och personliga Microsoft-konton (till exempel Skype, Xbox, Outlook.com), måste den godkända tokenversionen vara v2.0.
- Annars kan den godkända tokenversionen vara v1.0.
När du har skapat programmet kan du bestämma eller ändra den godkända tokenversionen genom att följa dessa steg:
- I administrationscentret för Microsoft Entra väljer du din app och väljer sedan Manifest.
- Hitta egenskapen accessTokenAcceptedVersion i manifestet.
- Värdet anger för Microsoft Entra vilken tokenversion webb-API:et accepterar.
- Om värdet är 2 accepterar webb-API:et v2.0-token.
- Om värdet är null accepterar webb-API:et v1.0-token.
 
- Om du har ändrat tokenversionen väljer du Spara.
Webb-API:et anger vilken tokenversion den accepterar. När en klient begär en token för webb-API:et från Microsofts identitetsplattform hämtar klienten en token som anger vilken tokenversion webb-API:et accepterar.
Vad definierar ASP.NET och ASP.NET Core API:er som skyddade?
Precis som webbappar skyddas ASP.NET och ASP.NET Core-webb-API:er eftersom deras kontrollantåtgärder är prefix med attributet [Auktorisera]. Kontrollantåtgärderna kan bara anropas om API:et anropas med en auktoriserad identitet.
Överväg följande frågor:
- Endast en app kan anropa ett webb-API. Hur känner API:et till identiteten för den app som anropar den?
- Vad är användarens identitet om appen anropar API:et för en användares räkning?
Ägartoken
Ägartoken som anges i huvudet när appen anropas innehåller information om appidentiteten. Den innehåller också information om användaren såvida inte webbappen accepterar tjänst-till-tjänst-anrop från en daemon-app.
Här är ett C#-kodexempel som visar en klient som anropar API:et när den har hämtat en token med Microsoft Authentication Library för .NET (MSAL.NET):
var scopes = new[] {$"api://.../access_as_user"};
var result = await app.AcquireToken(scopes)
                      .ExecuteAsync();
httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);
// Call the web API.
HttpResponseMessage response = await _httpClient.GetAsync(apiUri);
Viktigt!
Ett klientprogram begär ägartoken till Microsofts identitetsplattform för webb-API:et. API:et är det enda program som ska verifiera token och visa de anspråk som den innehåller. Klientappar bör aldrig försöka inspektera anspråken i token.
I framtiden kan webb-API:et kräva att token krypteras. Det här kravet skulle förhindra åtkomst för klientappar som kan visa åtkomsttoken.
JwtBearer-konfiguration
I det här avsnittet beskrivs hur du konfigurerar en ägartoken.
Konfigurationsfil
Du behöver bara ange om TenantId du vill acceptera åtkomsttoken från en enda klientorganisation (verksamhetsspecifik app). Annars kan den lämnas som common. De olika värdena kan vara:
- Ett GUID (klient-ID = katalog-ID)
- 
              commonkan vara valfri organisation och personliga konton
- 
              organizationskan vara vilken organisation som helst
- 
              consumersär Microsofts personliga konton
{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "ClientId": "Enter_the_Application_(client)_ID_here",
    "TenantId": "common"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*"
}
Använda en anpassad app-ID-URI för ett webb-API
Om du har accepterat standardapp-ID:t som föreslås av Azure-portalen behöver du inte ange målgruppen. Annars lägger du till en Audience egenskap vars värde är app-ID-URI:n för ditt webb-API. Detta börjar vanligtvis med api://.
{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "ClientId": "Enter_the_Application_(client)_ID_here",
    "TenantId": "common",
    "Audience": "Enter_the_Application_ID_URI_here"
  },
}
Kodinitiering
När en app anropas för en kontrollantåtgärd som innehåller ett [Auktorisera] -attribut extraherar ASP.NET och ASP.NET Core åtkomsttoken från auktoriseringshuvudets ägartoken. Åtkomsttoken vidarebefordras sedan till JwtBearer-mellanprogrammet, som anropar Microsoft IdentityModel Extensions för .NET.
Microsoft.Identity.Web
Microsoft rekommenderar att du använder NuGet-paketet Microsoft.Identity.Web när du utvecklar ett webb-API med ASP.NET Core.
Microsoft.Identity.Web tillhandahåller limmet mellan ASP.NET Core, mellanprogrammet för autentisering och Microsoft Authentication Library (MSAL) för .NET. Det ger en tydligare och mer robust utvecklarupplevelse och utnyttjar kraften i Microsofts identitetsplattform och Azure AD B2C.
ASP.NET för .NET 6.0
Om du vill skapa ett nytt webb-API-projekt som använder Microsoft.Identity.Web använder du en projektmall i .NET 6.0 CLI eller Visual Studio.
Dotnet core CLI
# Create new web API that uses Microsoft.Identity.Web
dotnet new webapi --auth SingleOrg
Visual Studio – Om du vill skapa ett webb-API-projekt i Visual Studio väljer du >
Både .NET CLI- och Visual Studio-projektmallarna skapar en Program.cs fil som liknar det här kodfragmentet. Observera Microsoft.Identity.Web att du använder direktivet och raderna som innehåller autentisering och auktorisering.
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.Identity.Web;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApi(builder.Configuration.GetSection("AzureAd"));
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app.Run();