Dela via


Snabbstart: Skydda ett ASP.NET Core-webb-API med Microsofts identitetsplattform

Välkommen! Det här är förmodligen inte den sida du förväntade dig. När vi arbetar med en korrigering bör den här länken ta dig till rätt artikel:

Snabbstart: Anropa ett ASP.NET Core-webb-API som skyddas av Microsofts identitetsplattform

Vi ber om ursäkt för besväret och uppskattar ditt tålamod medan vi arbetar för att få detta löst.

I följande snabbstart används ett kodexempel för ASP.NET Core-webb-API:et för att visa hur du begränsar resursåtkomsten till auktoriserade konton. Exemplet stöder auktorisering av personliga Microsoft-konton och -konton i alla Microsoft Entra-organisationer.

Förutsättningar

Steg 1: Registrera programmet

Registrera först webb-API:et i din Microsoft Entra-klientorganisation och lägg till ett omfång genom att följa dessa steg:

  1. Logga in på administrationscentret för Microsoft Entra som minst programadministratör.
  2. Bläddra till Identitetsprogram>> Appregistreringar.
  3. Välj Ny registrering.
  4. Som Namn anger du ett namn för programmet. Ange till exempel AspNetCoreWebApi-Quickstart. Användare av appen ser det här namnet och kan ändras senare.
  5. Välj Registrera.
  6. Under Hantera väljer du Exponera ett API>Lägg till ett omfång. För Program-ID-URI godkänner du standardvärdet genom att välja Spara och fortsätta och ange sedan följande information:
  • Omfångsnamn: access_as_user
  • Vem kan samtycka?: Administratörer och användare
  • Visningsnamn för administratörsmedgivande: Access AspNetCoreWebApi-Quickstart
  • Beskrivning av administratörsmedgivande: Allows the app to access AspNetCoreWebApi-Quickstart as the signed-in user.
  • Visningsnamn för användarmedgivande: Access AspNetCoreWebApi-Quickstart
  • Beskrivning av användarmedgivande: Allow the application to access AspNetCoreWebApi-Quickstart on your behalf.
  • Tillstånd: Aktiverad
  1. Välj Lägg till omfång för att slutföra omfångstillägget.

Steg 2: Ladda ned projektet ASP.NET Core

Ladda ned ASP.NET Core-lösningen från GitHub.

Kommentar

Kodexemplet riktar sig för närvarande till ASP.NET Core 3.1. Exemplet kan uppdateras för att använda .NET Core 6.0 och beskrivs i följande steg: Uppdatera exempelkoden till ASP.NET Core 6.0. Den här snabbstarten kommer att bli inaktuell inom en snar framtid och uppdateras för att använda .NET 6.0.

Steg 3: Konfigurera ASP.NET Core-projektet

I det här steget konfigureras exempelkoden så att den fungerar med appregistreringen som skapades tidigare.

  1. Extrahera .zip-filen till en lokal mapp som är nära roten på disken för att undvika fel som orsakas av sökvägslängdsbegränsningar i Windows. Du kan till exempel extrahera till C:\Azure-Samples.

  2. Öppna lösningen i mappen webapi i kodredigeraren.

  3. I appsettings.json ersätter du värdena ClientIdför , och TenantId.

    "ClientId": "Enter_the_Application_Id_here",
    "TenantId": "Enter_the_Tenant_Info_Here"
    
    • Enter_the_Application_Id_Here är programmets (klientens) ID för det registrerade programmet.
    • Ersätt Enter_the_Tenant_Info_Here med något av följande:
      • Om programmet endast stöder konton i den här organisationskatalogen ersätter du det här värdet med katalog-ID :t (klientorganisationen) (ett GUID) eller klientnamn (till exempel contoso.onmicrosoft.com). Katalog-ID:t (klientorganisation) finns på appens översiktssida.
      • Om programmet stöder Konton i en organisationskatalog ersätter du det här värdet med organizations.
      • Om programmet stöder Alla Microsoft-kontoanvändare lämnar du det här värdet som common.

För den här snabbstarten ändrar du inga andra värden i filen appsettings.json .

Steg 4: Uppdatera exempelkoden till ASP.NET Core 6.0

Följ dessa steg för att uppdatera det här kodexemplet till ASP.NET Core 6.0:

  1. Öppna webapi.csproj
  2. Ta bort följande rad:
<TargetFramework>netcoreapp3.1</TargetFramework>
  1. Lägg till följande rad i dess ställe:
<TargetFramework>netcoreapp6.0</TargetFramework>

Det här steget säkerställer att exemplet är inriktat på .NET Core 6.0-ramverket.

Steg 5: Kör exemplet

  1. Öppna en terminal och ändra katalogen till projektmappen.

    cd webapi
    
  2. Kör följande kommando för att skapa lösningen:

dotnet run

Om bygget har lyckats visas följande utdata:

Building...
info: Microsoft.Hosting.Lifetime[0]
    Now listening on: https://localhost:{port}
info: Microsoft.Hosting.Lifetime[0]
    Now listening on: http://localhost:{port}
info: Microsoft.Hosting.Lifetime[0]
    Application started. Press Ctrl+C to shut down.
...

Så här fungerar exemplet

Startklass

Mellanprogrammet Microsoft.AspNetCore.Authentication använder en Startup klass som körs när värdprocessen startar. I metoden ConfigureServices anropas tilläggsmetoden AddMicrosoftIdentityWebApi som tillhandahålls av Microsoft.Identity.Web .

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
                .AddMicrosoftIdentityWebApi(Configuration, "AzureAd");
    }

Metoden AddAuthentication() konfigurerar tjänsten för att lägga till JwtBearer-baserad autentisering.

Raden som innehåller .AddMicrosoftIdentityWebApi lägger till Microsofts identitetsplattform auktorisering till webb-API:et. Sedan konfigureras den för att verifiera åtkomsttoken som utfärdats av Microsofts identitetsplattform baserat på informationen i avsnittet i AzureAD appsettings.json-konfigurationsfilen:

appsettings.json nyckel beskrivning
ClientId Program-ID (klient) för det registrerade programmet.
Instance StS-slutpunkten (Security Token Service) som användaren kan autentisera. Det här värdet är vanligtvis https://login.microsoftonline.com/, vilket anger det offentliga Azure-molnet.
TenantId Namnet på din klientorganisation eller dess klientorganisations-ID (ett GUID) eller common för att logga in användare med arbets- eller skolkonton eller Personliga Microsoft-konton.

Metoden Configure() innehåller två viktiga metoder, app.UseAuthentication() och app.UseAuthorization(), som aktiverar deras namngivna funktioner:

// The runtime calls this method. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    // more code
    app.UseAuthentication();
    app.UseAuthorization();
    // more code
}

Skydda en kontrollant, en kontrollants metod eller en Razor-sida

En kontrollant eller kontrollantmetoder kan skyddas med hjälp av attributet [Authorize] . Det här attributet begränsar åtkomsten till kontrollanten eller metoderna genom att endast tillåta autentiserade användare. En autentiseringsutmaning kan startas för att komma åt kontrollanten om användaren inte autentiseras.

namespace webapi.Controllers
{
    [Authorize]
    [ApiController]
    [Route("[controller]")]
    public class WeatherForecastController : ControllerBase

Validering av omfånget i kontrollanten

Koden i API:et verifierar att de nödvändiga omfången finns i token med hjälp HttpContext.VerifyUserHasAnyAcceptedScope> (scopeRequiredByApi);av :

namespace webapi.Controllers
{
    [Authorize]
    [ApiController]
    [Route("[controller]")]
    public class WeatherForecastController : ControllerBase
    {
        // The web API will only accept tokens 1) for users, and 2) having the "access_as_user" scope for this API
        static readonly string[] scopeRequiredByApi = new string[] { "access_as_user" };

        [HttpGet]
        public IEnumerable<WeatherForecast> Get()
        {
            HttpContext.VerifyUserHasAnyAcceptedScope(scopeRequiredByApi);

            // some code here
        }
    }
}

Hjälp och support

Om du behöver hjälp, vill rapportera ett problem eller vill lära dig mer om dina supportalternativ kan du läsa Hjälp och support för utvecklare.

Nästa steg

Följande GitHub-lagringsplats innehåller kodexemplet ASP.NET Core web API och fler exempel som visar hur du uppnår följande:

  • Lägg till autentisering i ett nytt ASP.NET Core-webb-API.
  • Anropa webb-API:et från ett skrivbordsprogram.
  • Anropa underordnade API:er som Microsoft Graph och andra Microsoft-API:er.