Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:
Werknemerstenants (meer informatie)
In dit artikel wordt beschreven hoe u code configureert voor een web-API-app met behulp van de OAuth 2.0-autorisatiecodestroom.
Microsoft raadt u aan het NuGet-pakket Microsoft.Identity.Web te gebruiken bij het ontwikkelen van een met ASP.NET Core beveiligde API die downstream-web-API's aanroept. Zie Beveiligde web-API: codeconfiguratie | Microsoft.Identity.Web voor een snelle presentatie van die bibliotheek in de context van een web-API.
Vereisten
- Een Azure-account met een actief abonnement.
Gratis een account maken Dit account moet machtigingen hebben voor het beheren van toepassingen. Gebruik een van de volgende rollen die nodig zijn om de toepassing te registreren:
- Applicatiebeheerder
- Toepassingsontwikkelaar
- Registreer een nieuwe app in het Microsoft Entra-beheercentrum, alleen geconfigureerd voor accounts in deze organisatiemap. Raadpleeg Een applicatie registreren voor meer details. Noteer de volgende waarden van de Overview pagina van de applicatie voor later gebruik.
- Applicatie (client) ID
- ID van de directory (tenant)
- Voeg een clientcertificaat toe aan de app-registratie. Zie Toepassingsreferenties toevoegen en beheren in Microsoft Entra ID voor meer informatie.
De app configureren
Kies een taal voor uw web-API.
Clientgeheimen of clientcertificaten
Aangezien uw web-app nu een downstream-web-API aanroept, geeft u een clientgeheim of clientcertificaat op in het bestand appsettings.json. U kunt ook een sectie toevoegen die het volgende aangeeft:
- De URL van de downstream web-API
- De vereiste scopes voor het aanroepen van de API
In het volgende voorbeeld geeft de GraphBeta sectie deze instellingen op.
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"ClientId": "[Enter_the_Application_Id_Here]",
"TenantId": "common",
// To call an API
"ClientCredentials": [
{
"SourceType": "ClientSecret",
"ClientSecret":"[Enter_the_Client_Secret_Here]"
}
]
},
"GraphBeta": {
"BaseUrl": "https://graph.microsoft.com/beta",
"Scopes": ["user.read"]
}
}
Notitie
U kunt een verzameling klantreferenties voorstellen, inclusief een oplossing zonder referenties zoals workload-identiteitsfederatie voor Azure Kubernetes Service. Vorige versies van Microsoft.Identity.Web hebben het clientgeheim uitgedrukt in één eigenschap ClientSecret in plaats van ClientCredentials. Dit wordt nog steeds ondersteund voor compatibiliteit met eerdere versies, maar u kunt niet zowel de eigenschap ClientSecret als de verzameling ClientCredentials gebruiken.
In plaats van een clientgeheim kunt u een clientcertificaat opgeven. Het volgende codefragment toont het gebruik van een certificaat dat is opgeslagen in Azure Key Vault.
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"ClientId": "[Enter_the_Application_Id_Here]",
"TenantId": "common",
// To call an API
"ClientCredentials": [
{
"SourceType": "KeyVault",
"KeyVaultUrl": "https://msidentitywebsamples.vault.azure.net",
"KeyVaultCertificateName": "MicrosoftIdentitySamplesCert"
}
]
},
"GraphBeta": {
"BaseUrl": "https://graph.microsoft.com/beta",
"Scopes": ["user.read"]
}
}
Waarschuwing
Als u vergeet de Scopes in een matrix te wijzigen, zullen de scopes null weergeven wanneer u probeert de IDownstreamApi te gebruiken, en zal IDownstreamApi proberen een anonieme (niet-geverifieerde) oproep naar de downstream-API te doen, wat resulteert in een 401/unauthenticated.
Microsoft.Identity.Web biedt verschillende manieren om certificaten te beschrijven, zowel op configuratie als op code. Zie Microsoft.Identity.Web - Certificaten gebruiken op GitHub voor meer informatie.
Program.cs
using Microsoft.Identity.Web;
// ...
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(Configuration, Configuration.GetSection("AzureAd"))
.EnableTokenAcquisitionToCallDownstreamApi()
.AddInMemoryTokenCaches();
// ...
Een web-API moet een token verkrijgen voor de downstream-API. Geef deze op door de .EnableTokenAcquisitionToCallDownstreamApi() regel na .AddMicrosoftIdentityWebApi(Configuration) toe te voegen. Deze regel maakt de ITokenAcquisition service beschikbaar die kan worden gebruikt in de acties van controllers/pagina's.
Een alternatieve methode is echter het implementeren van een tokencache. Als u bijvoorbeeld .AddInMemoryTokenCaches() aan Program.cs toevoegt, kan het token in het geheugen in de cache worden opgeslagen.
using Microsoft.Identity.Web;
// ...
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(Configuration, Configuration.GetSection("AzureAd"))
.EnableTokenAcquisitionToCallDownstreamApi()
.AddInMemoryTokenCaches();
// ...
Microsoft.Identity.Web biedt twee mechanismen voor het aanroepen van een downstream-web-API vanuit een andere API. De optie die u kiest, is afhankelijk van of u Microsoft Graph of een andere API wilt aanroepen.
Optie 1: Microsoft Graph aanroepen
Als u Microsoft Graph wilt aanroepen, kunt u met Microsoft.Identity.Web de GraphServiceClient API-acties rechtstreeks gebruiken (beschikbaar gesteld door de Microsoft Graph SDK).
Notitie
Er is een doorlopend probleem met Microsoft Graph SDK v5+. Raadpleeg het GitHub-probleem voor meer informatie.
Microsoft Graph beschikbaar maken:
- Voeg het NuGet-pakket Microsoft.Identity.Web.GraphServiceClient toe aan het project.
- Voeg
.AddMicrosoftGraph()na.EnableTokenAcquisitionToCallDownstreamApi()in Program.cs toe..AddMicrosoftGraph()heeft verschillende overschrijvingen. Als u de overschrijving gebruikt die een configuratiesectie als parameter neemt, wordt de code:
using Microsoft.Identity.Web;
// ...
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(Configuration, Configuration.GetSection("AzureAd"))
.EnableTokenAcquisitionToCallDownstreamApi()
.AddMicrosoftGraph(Configuration.GetSection("GraphBeta"))
.AddInMemoryTokenCaches();
// ...
Optie 2: een andere downstream web-API aanroepen dan Microsoft Graph
- Voeg het NuGet-pakket Microsoft.Identity.Web.DownstreamApi toe aan het project.
- Voeg
.AddDownstreamApi()na.EnableTokenAcquisitionToCallDownstreamApi()in Program.cs toe. De code wordt:
using Microsoft.Identity.Web;
// ...
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(Configuration, "AzureAd")
.EnableTokenAcquisitionToCallDownstreamApi()
.AddDownstreamApi("MyApi", Configuration.GetSection("MyApiScope"))
.AddInMemoryTokenCaches();
// ...
waar;
-
MyApigeeft de naam aan van de downstream-web-API die uw web-API wil aanroepen -
MyApiScopeis het bereik dat uw web-API moet aanvragen om te communiceren met de downstream-web-API.
Deze waarden worden weergegeven in uw JSON die vergelijkbaar is met het volgende codefragment.
"DownstreamAPI": {
"BaseUrl": "https://downstreamapi.contoso.com/",
"Scopes": "user.read"
},
Als de web-app een andere API-resource moet aanroepen, herhaalt u de .AddDownstreamApi() methode met het relevante bereik, zoals wordt weergegeven in het volgende fragment:
using Microsoft.Identity.Web;
// ...
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(Configuration, "AzureAd")
.EnableTokenAcquisitionToCallDownstreamApi()
.AddDownstreamApi("MyApi", Configuration.GetSection("MyApiScope"))
.AddDownstreamApi("MyApi2", Configuration.GetSection("MyApi2Scope"))
.AddInMemoryTokenCaches();
// ...
Houd er rekening mee dat .EnableTokenAcquisitionToCallDownstreamApi zonder enige parameter wordt aangeroepen, wat betekent dat het toegangstoken precies op tijd wordt verkregen wanneer de controller het token aanvraagt door de reikwijdte te specificeren.
Het bereik kan ook worden doorgegeven tijdens het aanroepen .EnableTokenAcquisitionToCallDownstreamApi, waardoor de web-app het token verkrijgt tijdens de initiële aanmelding van de gebruiker zelf. Het token wordt vervolgens opgehaald uit de cache wanneer de controller dit aanvraagt.
Net als bij web-apps kunnen verschillende tokencache-implementaties worden gekozen. Zie Microsoft.Identity.Web - Serialisatie van tokencache op GitHub voor meer informatie.
In de volgende afbeelding ziet u de mogelijkheden van Microsoft.Identity.Web en de impact op Program.cs:
Notitie
Om de codevoorbeelden hier volledig te begrijpen, moet u vertrouwd zijn met ASP.NET Core basisprincipes en met name met afhankelijkheidsinjectie en opties.
U kunt ook een voorbeeld zien van de implementatie van een OBO-stroom in Node.js en Azure Functions.
protocol
Zie voor meer informatie over het OBO-protocol de Microsoft-identiteitsplatform en de On-Behalf-Of stroom voor OAuth 2.0.
Volgende stap
Een token voor de app verkrijgen.