Aktivera autentisering i ditt eget webb-API med hjälp av Azure AD B2C
Om du vill auktorisera åtkomst till ett webb-API kan du endast hantera begäranden som innehåller en giltig åtkomsttoken som problem med Azure Active Directory B2C (Azure AD B2C). Den här artikeln visar hur du aktiverar Azure AD B2C-auktorisering till ditt webb-API. När du har slutfört stegen i den här artikeln kommer endast användare som hämtar en giltig åtkomsttoken att ha behörighet att anropa dina webb-API-slutpunkter.
Förutsättningar
Innan du börjar läser du någon av följande artiklar som beskriver hur du konfigurerar autentisering för appar som anropar webb-API:er. Följ sedan stegen i den här artikeln för att ersätta exempelwebb-API:et med ditt eget webb-API.
- Konfigurera autentisering i ett exempel på ASP.NET Core-program
- Konfigurera autentisering i ett exempel på ensidesprogram (SPA)
Översikt
Tokenbaserad autentisering säkerställer att begäranden till ett webb-API innehåller en giltig åtkomsttoken.
Appen slutför följande steg:
Den autentiserar användare med Azure AD B2C.
Den hämtar en åtkomsttoken med nödvändiga behörigheter (omfång) för webb-API-slutpunkten.
Den skickar åtkomsttoken som en ägartoken i autentiseringshuvudet för HTTP-begäran med hjälp av följande format:
Authorization: Bearer <access token>
Webb-API:et slutför följande steg:
Den läser ägartoken från auktoriseringshuvudet i HTTP-begäran.
Den validerar token.
Den verifierar behörigheterna (omfången) i token.
Den läser de anspråk som kodas i token (valfritt).
Den svarar på HTTP-begäran.
Översikt över appregistrering
För att göra det möjligt för din app att logga in med Azure AD B2C och anropa ett webb-API måste du registrera två program i Azure AD B2C-katalogen.
Med webb-, mobil- eller SPA-programregistreringen kan din app logga in med Azure AD B2C. Appregistreringsprocessen genererar ett program-ID, även kallat klient-ID, som unikt identifierar ditt program (till exempel app-ID: 1).
Med registreringen av webb-API :et kan din app anropa ett skyddat webb-API. Registreringen exponerar webb-API-behörigheter (omfång). Appregistreringsprocessen genererar ett program-ID som unikt identifierar ditt webb-API (till exempel app-ID: 2). Ge din app (app-ID: 1) behörighet till webb-API-omfången (app-ID: 2).
Programregistreringarna och programarkitekturen beskrivs i följande diagram:
Förbereda utvecklingsmiljön
I nästa avsnitt skapar du ett nytt webb-API-projekt. Välj programmeringsspråket ASP.NET Core eller Node.js. Kontrollera att du har en dator som kör något av följande program:
- Visual Studio Code
- C# för Visual Studio Code (senaste versionen)
- .NET 5.0 SDK
Steg 1: Skapa ett skyddat webb-API
Skapa ett nytt webb-API-projekt. Välj först det programmeringsspråk som du vill använda, ASP.NET Core eller Node.js.
Använd kommandot dotnet new
. Kommandot dotnet new
skapar en ny mapp med namnet TodoList med webb-API-projekttillgångarna. Öppna katalogen och öppna sedan Visual Studio Code.
dotnet new webapi -o TodoList
cd TodoList
code .
När du uppmanas att "lägga till nödvändiga tillgångar i projektet" väljer du Ja.
Steg 2: Installera beroendena
Lägg till autentiseringsbiblioteket i ditt webb-API-projekt. Autentiseringsbiblioteket parsar HTTP-autentiseringshuvudet, validerar token och extraherar anspråk. Mer information finns i dokumentationen för biblioteket.
Om du vill lägga till autentiseringsbiblioteket installerar du paketet genom att köra följande kommando:
dotnet add package Microsoft.Identity.Web
Steg 3: Initiera autentiseringsbiblioteket
Lägg till nödvändig kod för att initiera autentiseringsbiblioteket.
Öppna Startup.cs och lägg sedan till följande using
deklarationer i början av klassen:
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.Identity.Web;
ConfigureServices(IServiceCollection services)
Hitta funktionen. Lägg sedan till följande kodfragment före services.AddControllers();
kodraden:
public void ConfigureServices(IServiceCollection services)
{
// Adds Microsoft Identity platform (Azure AD B2C) support to protect this Api
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(options =>
{
Configuration.Bind("AzureAdB2C", options);
options.TokenValidationParameters.NameClaimType = "name";
},
options => { Configuration.Bind("AzureAdB2C", options); });
// End of the Microsoft Identity platform block
services.AddControllers();
}
Configure
Hitta funktionen. Lägg sedan till följande kodfragment direkt efter app.UseRouting();
kodraden:
app.UseAuthentication();
Efter ändringen bör koden se ut som följande kodfragment:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
// Add the following line
app.UseAuthentication();
// End of the block you add
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
Steg 4: Lägg till slutpunkterna
Lägg till två slutpunkter i webb-API:et:
- Anonym
/public
slutpunkt. Den här slutpunkten returnerar aktuellt datum och tid. Använd den för att felsöka ditt webb-API med anonyma anrop. - Skyddad
/hello
slutpunkt. Den här slutpunkten returnerar värdet för anspråketname
i åtkomsttoken.
Så här lägger du till den anonyma slutpunkten:
Under mappen /Controllers lägger du till en PublicController.cs-fil och lägger sedan till den i följande kodfragment:
using System;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
namespace TodoList.Controllers
{
[ApiController]
[Route("[controller]")]
public class PublicController : ControllerBase
{
private readonly ILogger<PublicController> _logger;
public PublicController(ILogger<PublicController> logger)
{
_logger = logger;
}
[HttpGet]
public ActionResult Get()
{
return Ok( new {date = DateTime.UtcNow.ToString()});
}
}
}
Så här lägger du till den skyddade slutpunkten:
Under mappen /Controllers lägger du till en HelloController.cs-fil och lägger sedan till den i följande kod:
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Microsoft.Identity.Web.Resource;
namespace TodoList.Controllers
{
[Authorize]
[RequiredScope("tasks.read")]
[ApiController]
[Route("[controller]")]
public class HelloController : ControllerBase
{
private readonly ILogger<HelloController> _logger;
private readonly IHttpContextAccessor _contextAccessor;
public HelloController(ILogger<HelloController> logger, IHttpContextAccessor contextAccessor)
{
_logger = logger;
_contextAccessor = contextAccessor;
}
[HttpGet]
public ActionResult Get()
{
return Ok( new { name = User.Identity.Name});
}
}
}
Kontrollanten HelloController
är dekorerad med AuthorizeAttribute, som endast begränsar åtkomsten till autentiserade användare.
Styrenheten är också dekorerad med [RequiredScope("tasks.read")]
. RequiredScopeAttribute verifierar att webb-API:et anropas med rätt omfång, tasks.read
.
Steg 5: Konfigurera webbservern
I en utvecklingsmiljö anger du att webb-API:et ska lyssna på inkommande HTTP- eller HTTPS-begärandens portnummer. I det här exemplet använder du HTTP-port 6000 och HTTPS-port 6001. Bas-URI:n för webb-API:et kommer att vara http://localhost:6000
för HTTP och https://localhost:6001
för HTTPS.
Lägg till följande JSON-kodfragment i filen appsettings.json .
"Kestrel": {
"EndPoints": {
"Http": {
"Url": "http://localhost:6000"
},
"Https": {
"Url": "https://localhost:6001"
}
}
}
Steg 6: Konfigurera webb-API:et
Lägg till konfigurationer i en konfigurationsfil. Filen innehåller information om din Azure AD B2C-identitetsprovider. Webb-API-appen använder den här informationen för att verifiera den åtkomsttoken som webbappen skickar som en ägartoken.
Under projektrotmappen öppnar du filen appsettings.json och lägger sedan till följande inställningar:
{
"AzureAdB2C": {
"Instance": "https://contoso.b2clogin.com",
"Domain": "contoso.onmicrosoft.com",
"ClientId": "<web-api-app-application-id>",
"SignedOutCallbackPath": "/signout/<your-sign-up-in-policy>",
"SignUpSignInPolicyId": "<your-sign-up-in-policy>"
},
// More settings here
}
Uppdatera följande egenskaper i filen appsettings.json :
Avsnitt | Tangent | Värde |
---|---|---|
AzureAdB2C | Instans | Den första delen av ditt Azure AD B2C-klientnamn (till exempel https://contoso.b2clogin.com ). |
AzureAdB2C | Domain | Ditt fullständiga klientnamn för Din Azure AD B2C-klientorganisation (till exempel contoso.onmicrosoft.com ). |
AzureAdB2C | ClientId | Webb-API-program-ID. I föregående diagram är det programmet med app-ID: 2. Information om hur du hämtar ditt webb-API-programregistrerings-ID finns i Krav. |
AzureAdB2C | SignUpSignInPolicyId | Användarflöden eller anpassad princip. Information om hur du hämtar ditt användarflöde eller din princip finns i Krav. |
Steg 7: Kör och testa webb-API:et
Kör slutligen webb-API:et med dina Azure AD B2C-miljöinställningar.
Starta webbappen i kommandogränssnittet genom att köra följande kommando:
dotnet run
Du bör se följande utdata, vilket innebär att appen är igång och redo att ta emot begäranden.
Now listening on: http://localhost:6000
Om du vill stoppa programmet väljer du Ctrl+C i kommandogränssnittet. Du kan köra appen igen med hjälp node app.js
av kommandot .
Dricks
Om du vill köra dotnet run
kommandot kan du också använda Felsökningsprogrammet för Visual Studio Code. Visual Studio Codes inbyggda felsökningsprogram hjälper dig att påskynda din redigerings-, kompilerings- och felsökningsloop.
Öppna en webbläsare och navigera till http://localhost:6000/public
. I webbläsarfönstret bör du se följande text, tillsammans med aktuellt datum och tid.
Steg 8: Anropa webb-API:et från din app
Försök att anropa den skyddade webb-API-slutpunkten utan en åtkomsttoken. Öppna en webbläsare och navigera till http://localhost:6000/hello
. API:et returnerar ett otillåtet HTTP-felmeddelande som bekräftar att webb-API:et är skyddat med en ägartoken.
Fortsätt att konfigurera appen så att den anropar webb-API:et. Vägledning finns i avsnittet Förutsättningar .
Titta på den här videon om du vill veta mer om några metodtips när du integrerar Azure AD B2C med ett API.
Nästa steg
Hämta det fullständiga exemplet på GitHub:
- Hämta webb-API:et med hjälp av Microsofts identitetsbibliotek.