Chráněné webové rozhraní API: Konfigurace kódu
Pokud chcete nakonfigurovat kód pro chráněné webové rozhraní API, seznamte se s následujícími informacemi:
- Co definuje rozhraní API jako chráněná.
- Jak nakonfigurovat nosný token
- Postup ověření tokenu
Co definuje ASP.NET a ASP.NET základní rozhraní API jako chráněná?
Podobně jako u webových aplikací jsou chráněná webová rozhraní API ASP.NET a ASP.NET Core, protože jejich akce kontroleru mají předponu atributu [Authorize]. Akce kontroleru je možné volat pouze v případě, že se rozhraní API volá s autorizovanou identitou.
Zvažte následující otázky:
- Webové rozhraní API může volat jenom aplikace. Jak rozhraní API zná identitu aplikace, která ji volá?
- Pokud aplikace volá rozhraní API jménem uživatele, jaká je identita uživatele?
Nosný token
Nosný token nastavený v hlavičce při zavolání aplikace obsahuje informace o identitě aplikace. Obsahuje také informace o uživateli, pokud webová aplikace nepřijímá volání mezi službami z aplikace démona.
Tady je příklad kódu jazyka C#, který zobrazuje klienta volajícího rozhraní API po získání tokenu s knihovnou Microsoft Authentication Library pro .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);
Důležité
Klientská aplikace požaduje nosný token na platformu Microsoft Identity Platform pro webové rozhraní API. Rozhraní API je jediná aplikace, která by měla token ověřit a zobrazit deklarace identity, které obsahuje. Klientské aplikace by se nikdy neměly pokoušet kontrolovat deklarace identity v tokenech.
V budoucnu může webové rozhraní API vyžadovat šifrování tokenu. Tento požadavek by zabránil přístupu klientským aplikacím, které můžou zobrazit přístupové tokeny.
Konfigurace JwtBearer
Tato část popisuje, jak nakonfigurovat nosný token.
Konfigurační soubor
Musíte zadat TenantId
pouze v případě, že chcete přijímat přístupové tokeny z jednoho tenanta (obchodní aplikace). V opačném případě může být ponechán jako common
. Různé hodnoty můžou být následující:
- IDENTIFIKÁTOR GUID (ID tenanta = ID adresáře)
common
může být jakýkoliv organizační a osobní účet.organizations
může být libovolná organizace.consumers
jsou osobní účty Microsoft.
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"ClientId": "Enter_the_Application_(client)_ID_here",
"TenantId": "common"
},
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*"
}
Použití vlastního identifikátoru URI ID aplikace pro webové rozhraní API
Pokud jste přijali výchozí identifikátor URI ID aplikace navržený na webu Azure Portal, nemusíte zadávat cílovou skupinu (viz identifikátor URI a rozsahy ID aplikace). V opačném případě přidejte Audience
vlastnost, jejíž hodnotou je identifikátor URI ID aplikace pro webové rozhraní API. Obvykle začíná na api://
.
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"ClientId": "Enter_the_Application_(client)_ID_here",
"TenantId": "common",
"Audience": "Enter_the_Application_ID_URI_here"
},
}
Inicializace kódu
Když je aplikace volána v akci kontroleru, která obsahuje atribut [Authorize], ASP.NET a ASP.NET Core extrahuje přístupový token z nosný token hlavičky autorizace. Přístupový token se pak předá do middlewaru JwtBearer, který volá rozšíření Microsoft IdentityModel pro .NET.
Microsoft.Identity.Web
Microsoft doporučuje použít balíček NuGet Microsoft.Identity.Web při vývoji webového rozhraní API s ASP.NET Core.
Microsoft.Identity.Web poskytuje připevnění mezi ASP.NET Core, middlewarem ověřování a knihovnou MSAL (Microsoft Authentication Library) pro .NET. Umožňuje jasnější a robustnější vývojářské prostředí a využívá sílu platformy Microsoft Identity Platform a Azure AD B2C.
ASP.NET pro .NET 6.0
Pokud chcete vytvořit nový projekt webového rozhraní API, který používá Microsoft.Identity.Web, použijte šablonu projektu v rozhraní příkazového řádku .NET 6.0 nebo sadě Visual Studio.
Rozhraní příkazového řádku Dotnet Core
# Create new web API that uses Microsoft.Identity.Web
dotnet new webapi --auth SingleOrg
Visual Studio – Pokud chcete vytvořit projekt webového rozhraní API v sadě Visual Studio, vyberte File>New>Project>ASP.NET Core Web API.
Šablony projektů .NET CLI i sady Visual Studio vytvoří soubor Program.cs , který bude vypadat podobně jako tento fragment kódu. Všimněte si Microsoft.Identity.Web
použití direktivy a řádků obsahujících ověřování a autorizaci.
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();