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
- Azure-konto med en aktiv prenumeration. Skapa ett konto utan kostnad.
- Microsoft Entra-klientorganisation
- Ett minimikrav för .NET 6.0 SDK
- Visual Studio 2022 eller Visual Studio Code
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:
- Logga in på administrationscentret för Microsoft Entra som minst programadministratör.
- Bläddra till Identitetsprogram>> Appregistreringar.
- Välj Ny registrering.
- 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.
- Välj Registrera.
- 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
- 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.
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.
Öppna lösningen i mappen webapi i kodredigeraren.
I appsettings.json ersätter du värdena
ClientId
för , ochTenantId
."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
.
- 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
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:
- Öppna webapi.csproj
- Ta bort följande rad:
<TargetFramework>netcoreapp3.1</TargetFramework>
- 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
Öppna en terminal och ändra katalogen till projektmappen.
cd webapi
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.