Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:
Tenanti pracovních sil (další informace)
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
Přijatá verze tokenu
Platforma Microsoft Identity Platform může vydávat tokeny v1.0 a tokeny v2.0. Další informace o těchto tokenech najdete v Přístupové tokeny.
Verze tokenu, kterou vaše rozhraní API může přijmout, závisí na výběru podporovaných typů účtů při vytváření registrace aplikace webového rozhraní API na webu Azure Portal.
- Pokud je hodnota podporovaných typů účtůÚčty v libovolném organizačním adresáři a osobních účtech Microsoft (například Skype, Xbox, Outlook.com), musí být verze přijatého tokenu verze 2.0.
- V opačném případě může být verze přijatého tokenu verze 1.0.
Po vytvoření aplikace můžete určit nebo změnit přijatou verzi tokenu pomocí následujícího postupu:
- V Centru pro správu Microsoft Entra vyberte aplikaci a pak vyberte Manifest.
- Vyhledejte vlastnost accessTokenAcceptedVersion v manifestu.
- Hodnota určuje pro Microsoft Entra, kterou verzi tokenu přijímá webové API.
- Pokud je hodnota 2, webové rozhraní API přijímá tokeny v2.0.
- Pokud je hodnota null, webové rozhraní API přijímá tokeny v1.0.
- Pokud jste změnili verzi tokenu, vyberte Uložit.
Webové rozhraní API určuje, jakou verzi tokenu přijímá. Když klient požádá o token pro webové rozhraní API z platformy Microsoft Identity Platform, klient získá token, který označuje verzi tokenu, kterou webové rozhraní API přijímá.
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)
-
commonmůže být jakýkoliv organizační a osobní účet. -
organizationsmůže být libovolná organizace. -
consumersjsou 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. 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 >
Š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();