Hitelesítés engedélyezése a saját webes API-ban az Azure AD B2C használatával
A webes API-khoz való hozzáférés engedélyezéséhez csak olyan kéréseket tud kiszolgálni, amelyek az Azure Active Directory B2C (Azure AD B2C) által problémákat okozó érvényes hozzáférési jogkivonatot tartalmaznak. Ez a cikk bemutatja, hogyan engedélyezheti az Azure AD B2C-hitelesítést a webes API-ban. A cikkben ismertetett lépések elvégzése után csak azok a felhasználók jogosultak a webes API-végpontok meghívására, akik érvényes hozzáférési jogkivonatot szereznek be.
Előfeltételek
Mielőtt hozzákezdene, olvassa el az alábbi cikkek egyikét, amelyek a webes API-kat hívó alkalmazások hitelesítésének konfigurálását ismertetik. Ezután kövesse a cikkben leírt lépéseket a minta webes API saját webes API-ra való lecseréléséhez.
- Hitelesítés konfigurálása minta ASP.NET Core-alkalmazásban
- Hitelesítés konfigurálása egy egyoldalas mintaalkalmazásban (SPA)
Áttekintés
A jogkivonatalapú hitelesítés biztosítja, hogy a webes API-hoz érkező kérések érvényes hozzáférési jogkivonatot tartalmazzanak.
Az alkalmazás a következő lépéseket hajtja végre:
Az Azure AD B2C-vel hitelesíti a felhasználókat.
A webes API-végponthoz szükséges engedélyekkel (hatókörökkel) rendelkező hozzáférési jogkivonatot szerez be.
A http-kérés hitelesítési fejlécében a hozzáférési jogkivonatot az alábbi formátumban adja át tulajdonosi jogkivonatként:
Authorization: Bearer <access token>
A webes API a következő lépéseket hajtja végre:
Beolvassa a tulajdonosi jogkivonatot a HTTP-kérelem engedélyezési fejlécéből.
Ellenőrzi a jogkivonatot.
Ellenőrzi a jogkivonatban szereplő engedélyeket (hatóköröket).
Beolvassa a jogkivonatban kódolt jogcímeket (nem kötelező).
Válaszol a HTTP-kérésre.
Alkalmazásregisztráció áttekintése
Ahhoz, hogy az alkalmazás bejelentkezhessen az Azure AD B2C-vel, és meghívjon egy webes API-t, két alkalmazást kell regisztrálnia az Azure AD B2C címtárban.
A webes, mobil- vagy SPA-alkalmazásregisztrációval az alkalmazás bejelentkezhet az Azure AD B2C-vel. Az alkalmazásregisztrációs folyamat létrehoz egy alkalmazásazonosítót, más néven ügyfélazonosítót, amely egyedileg azonosítja az alkalmazást (például: 1. alkalmazásazonosító).
A webes API-regisztrációval az alkalmazás meghívhat egy védett webes API-t. A regisztráció elérhetővé teszi a webes API-engedélyeket (hatóköröket). Az alkalmazásregisztrációs folyamat létrehoz egy alkalmazásazonosítót, amely egyedileg azonosítja a webes API-t (például alkalmazásazonosító: 2). Adjon engedélyt az alkalmazásnak (alkalmazásazonosító: 1) a webes API-hatókörökhöz (alkalmazásazonosító: 2).
Az alkalmazásregisztrációkat és az alkalmazásarchitektúrát az alábbi diagram ismerteti:
A fejlesztőkörnyezet előkészítése
A következő szakaszokban egy új webes API-projektet hoz létre. Válassza ki a programozási nyelvet, ASP.NET Core-t vagy Node.js-t. Győződjön meg arról, hogy rendelkezik olyan számítógéppel, amely az alábbi szoftverek valamelyikét futtatja:
- Visual Studio Code
- C# for Visual Studio Code (legújabb verzió)
- .NET 5.0 SDK
1. lépés: Védett webes API létrehozása
Hozzon létre egy új webes API-projektet. Először válassza ki a használni kívánt programozási nyelvet, ASP.NET Core vagy Node.js.
Használja az dotnet new
parancsot. A dotnet new
parancs létrehoz egy TodoList nevű új mappát a webes API-projektegységekkel. Nyissa meg a könyvtárat, majd nyissa meg a Visual Studio Code-ot.
dotnet new webapi -o TodoList
cd TodoList
code .
Amikor a rendszer kéri, hogy "adja hozzá a szükséges eszközöket a projekthez", válassza az Igen lehetőséget.
2. lépés: A függőségek telepítése
Adja hozzá a hitelesítési kódtárat a webes API-projekthez. A hitelesítési kódtár elemzi a HTTP-hitelesítési fejlécet, ellenőrzi a jogkivonatot, és kinyeri a jogcímeket. További információkért tekintse át a könyvtár dokumentációját.
A hitelesítési kódtár hozzáadásához telepítse a csomagot az alábbi parancs futtatásával:
dotnet add package Microsoft.Identity.Web
3. lépés: A hitelesítési kódtár kezdeményezése
Adja hozzá a hitelesítési kódtár elindításához szükséges kódot.
Nyissa meg a Startup.cs fájlt, majd az osztály elején adja hozzá a következő using
deklarációkat:
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.Identity.Web;
Keresse meg a függvényt ConfigureServices(IServiceCollection services)
. Ezután a services.AddControllers();
kódsor előtt adja hozzá a következő kódrészletet:
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();
}
Keresse meg a függvényt Configure
. Ezután közvetlenül a app.UseRouting();
kódsor után adja hozzá a következő kódrészletet:
app.UseAuthentication();
A módosítás után a kódnak a következő kódrészlethez hasonlóan kell kinéznie:
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();
});
}
4. lépés: A végpontok hozzáadása
Adjon hozzá két végpontot a webes API-hoz:
- Névtelen
/public
végpont. Ez a végpont az aktuális dátumot és időt adja vissza. Segítségével névtelen hívásokkal hibakeresést végezhet a webes API-val. - Védett
/hello
végpont. Ez a végpont a jogcím értékét adja vissza aname
hozzáférési jogkivonaton belül.
A névtelen végpont hozzáadása:
A /Controllers mappában vegyen fel egy PublicController.cs fájlt, majd adja hozzá a következő kódrészlethez:
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()});
}
}
}
A védett végpont hozzáadása:
A /Controllers mappában adjon hozzá egy HelloController.cs fájlt, majd adja hozzá a következő kódhoz:
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});
}
}
}
A HelloController
vezérlőt az AuthorizeAttribute díszíti, amely csak a hitelesített felhasználók hozzáférését korlátozza.
A vezérlőt [RequiredScope("tasks.read")]
a . A RequiredScopeAttribute ellenőrzi, hogy a webes API a megfelelő hatókörökkel van-e meghívva. tasks.read
5. lépés: A webkiszolgáló konfigurálása
Fejlesztői környezetben állítsa be a webes API-t a bejövő HTTP- vagy HTTPS-kérelmek portszámának figyelésére. Ebben a példában a HTTP-port 6000-et és a HTTPS-portot 6001-et használjuk. A webes API alap URI-ja HTTP-hez és https://localhost:6001
HTTPS-hez leszhttp://localhost:6000
.
Adja hozzá a következő JSON-kódrészletet az appsettings.json fájlhoz .
"Kestrel": {
"EndPoints": {
"Http": {
"Url": "http://localhost:6000"
},
"Https": {
"Url": "https://localhost:6001"
}
}
}
6. lépés: A webes API konfigurálása
Konfigurációk hozzáadása konfigurációs fájlhoz. A fájl információkat tartalmaz az Azure AD B2C-identitásszolgáltatóról. A web API-alkalmazás ezen információk alapján ellenőrzi a webalkalmazás által tulajdonosi jogkivonatként áthaladó hozzáférési jogkivonatot.
A projekt gyökérmappájában nyissa meg az appsettings.json fájlt, majd adja hozzá a következő beállításokat:
{
"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
}
Az appsettings.json fájlban frissítse a következő tulajdonságokat:
Szakasz | Key | Érték |
---|---|---|
AzureAdB2C | Példány | Az Azure AD B2C-bérlő nevének első része (például https://contoso.b2clogin.com ). |
AzureAdB2C | Tartomány | Az Azure AD B2C-bérlő teljes bérlőneve (például contoso.onmicrosoft.com ). |
AzureAdB2C | ClientID | A webes API-alkalmazás azonosítója. Az előző ábrán ez az alkalmazás a következő alkalmazásazonosítóval: 2. A webes API-alkalmazásregisztrációs azonosító lekéréséről az előfeltételek című témakörben olvashat. |
AzureAdB2C | SignUpSignInPolicyId | A felhasználói folyamatok vagy egyéni szabályzatok. A felhasználói folyamat vagy szabályzat beszerzésének módjáról az előfeltételek című témakörben olvashat. |
7. lépés: A webes API futtatása és tesztelése
Végül futtassa a webes API-t az Azure AD B2C környezeti beállításaival.
A parancshéjban indítsa el a webalkalmazást a következő parancs futtatásával:
dotnet run
A következő kimenetnek kell megjelennie, ami azt jelenti, hogy az alkalmazás működik, és készen áll a kérések fogadására.
Now listening on: http://localhost:6000
A program leállításához a parancshéjban válassza a Ctrl+C billentyűkombinációt. A parancs használatával újrafuttathatja az node app.js
alkalmazást.
Tipp.
A parancs futtatásához használhatja a dotnet run
Visual Studio Code hibakeresőt is. A Visual Studio Code beépített hibakeresője segít felgyorsítani a szerkesztési, fordítási és hibakeresési ciklust.
Nyisson meg egy böngészőt, és ugorjon a http://localhost:6000/public
címre. A böngészőablakban az alábbi szövegnek kell megjelennie az aktuális dátummal és időponttal együtt.
8. lépés: A webes API meghívása az alkalmazásból
Próbálja meg hozzáférési jogkivonat nélkül meghívni a védett webes API-végpontot. Nyisson meg egy böngészőt, és ugorjon a http://localhost:6000/hello
címre. Az API egy jogosulatlan HTTP-hibaüzenetet ad vissza, amely megerősíti, hogy a webes API védett egy tulajdonosi jogkivonattal.
Folytassa az alkalmazás konfigurálását a webes API meghívásához. Útmutatásért tekintse meg az Előfeltételek szakaszt .
Ebből a videóból megismerhet néhány ajánlott eljárást az Azure AD B2C API-val való integrálása során.
További lépések
Szerezze be a teljes példát a GitHubon:
- A webes API lekérése a Microsoft identitástárával.