.NET-apps verifiëren bij Azure-services tijdens lokale ontwikkeling met behulp van service-principals
Tijdens lokale ontwikkeling moeten toepassingen worden geverifieerd bij Azure om toegang te krijgen tot verschillende Azure-services. Twee veelvoorkomende methoden voor lokale verificatie zijn het een ontwikkelaarsaccount of een service-principal te gebruiken. In dit artikel wordt uitgelegd hoe u een toepassingsservice-principal gebruikt. In de volgende secties leert u het volgende:
- Een toepassing registreren bij Microsoft Entra om een service-principal te maken
- Microsoft Entra-groepen gebruiken om machtigingen efficiënt te beheren
- Rollen toewijzen aan scoperechten
- Authenticeren met behulp van een service-principal vanuit uw app-code
Met behulp van service-principals voor toegewezen toepassingen kunt u voldoen aan het principe van minimale bevoegdheden bij het openen van Azure-resources. Machtigingen zijn beperkt tot de specifieke vereisten van de app tijdens de ontwikkeling, waardoor onbedoelde toegang tot Azure-resources wordt voorkomen die zijn bedoeld voor andere apps of services. Deze aanpak helpt ook problemen te voorkomen wanneer de app naar productie wordt verplaatst door ervoor te zorgen dat deze niet te veel bevoegdheden heeft in de ontwikkelomgeving.
Een diagram waarin wordt getoond hoe een lokale .NET-app de referenties van de ontwikkelaar gebruikt om verbinding te maken met Azure met behulp van lokaal geïnstalleerde ontwikkeltools.
Wanneer de toepassing is geregistreerd in Azure, wordt er een toepassingsservice-principal gemaakt. Voor lokale ontwikkeling:
- Maak een afzonderlijke app-registratie voor elke ontwikkelaar die aan de app werkt om ervoor te zorgen dat elke ontwikkelaar een eigen toepassingsservice-principal heeft, zodat er geen referenties hoeven te worden gedeeld.
- Maak een afzonderlijke app-registratie voor elke app om de machtigingen van de app te beperken tot alleen wat nodig is.
Tijdens lokale ontwikkeling worden omgevingsvariabelen ingesteld met de identiteit van de toepassingsservice-principal. De Azure Identity-bibliotheek leest deze omgevingsvariabelen om de app te verifiëren bij de vereiste Azure-resources.
De app registreren in Azure
Toepassingsservice-principalobjecten worden gemaakt via een app-registratie in Azure met behulp van Azure Portal of Azure CLI.
Gebruik de zoekbalk in Azure Portal om naar de pagina App-registraties te gaan.
Op de pagina App-registraties, selecteer + Nieuwe registratie.
Op de pagina Een toepassing registreren:
- Voer voor het veld Naam een beschrijvende waarde in die de naam van de app en de doelomgeving bevat.
- Selecteer voor de Ondersteunde accounttypende optie Accounts in dit organisatieadresboek (alleen Microsoft Customer Led - Enkele tenant)of de optie die het beste bij uw vereisten past.
Selecteer Register om uw app te registreren en de service-principal te maken.
Kopieer op de pagina App-registratie voor uw app de toepassings-id (client) en Directory-id (tenant) en plak deze op een tijdelijke locatie voor later in de configuraties van uw applicatiecode.
Selecteer Een certificaat of geheim toevoegen om referenties voor uw app in te stellen.
Op de pagina Certificaten en geheimen, selecteer + Nieuw clientgeheim.
Voeg in het een clientgeheim toe flyoutvenster dat wordt geopend:
- Voer voor de Descriptioneen waarde in van Current.
- Voor de verloopt waarde, laat u de standaard aanbevolen waarde van 180 dagen staan.
- Kies Toevoegen om de geheime toe te voegen.
Kopieer op de pagina Certificaten & geheimen de eigenschap Waarde van het clientgeheim voor gebruik in een toekomstige stap.
Notitie
De waarde van het clientgeheim wordt slechts eenmaal weergegeven nadat de app-registratie is gemaakt. U kunt meer clientgeheimen toevoegen zonder dit clientgeheim ongeldig te maken, maar u kunt deze waarde niet opnieuw weergeven.
Een Microsoft Entra-groep maken voor lokale ontwikkeling
Maak een Microsoft Entra-groep om de rollen (machtigingen) die de app nodig heeft in lokale ontwikkeling in te kapselen in plaats van de rollen toe te wijzen aan afzonderlijke service-principal-objecten. Deze aanpak biedt de volgende voordelen:
- Elke ontwikkelaar heeft dezelfde rollen toegewezen op groepsniveau.
- Als er een nieuwe rol nodig is voor de app, hoeft deze alleen aan de groep voor de app te worden toegevoegd.
- Als een nieuwe ontwikkelaar lid wordt van het team, wordt er een nieuwe toepassingsservice-principal gemaakt voor de ontwikkelaar en toegevoegd aan de groep, zodat de ontwikkelaar over de juiste machtigingen beschikt om aan de app te werken.
Navigeer naar de Microsoft Entra ID overzichtspagina in Azure Portal.
Selecteer Alle groepen in het menu aan de linkerkant.
Op de pagina Groepen, selecteer Nieuwe groep.
Vul op de pagina Nieuwe groep de volgende formuliervelden in:
- groepstype: selecteer Security.
- groepsnaam: voer een naam in voor de groep die een verwijzing naar de naam van de app of omgeving bevat.
- beschrijving van de groep: voer een beschrijving in waarmee het doel van de groep wordt uitgelegd.
Selecteer de koppeling Geen leden geselecteerd onder Leden om leden toe te voegen aan de groep.
Zoek in het uitklapvenster dat wordt geopend naar de serviceprincipal die u eerder hebt gemaakt en selecteer deze uit de gefilterde resultaten. Kies de Select knop onderaan het deelvenster om uw selectie te bevestigen.
Selecteer Maak aan onder aan de Nieuwe groep pagina om de groep te maken en terug te keren naar de Alle groepen pagina. Als de nieuwe groep niet wordt weergegeven, wacht u even en vernieuwt u de pagina.
Rollen toewijzen aan de groep
Bepaal vervolgens welke rollen (machtigingen) uw app nodig heeft voor welke resources en wijs deze rollen toe aan de Microsoft Entra-groep die u hebt gemaakt. Aan groepen kan een rol worden toegewezen in het bereik van de resource, resourcegroep of abonnement. In dit voorbeeld ziet u hoe u rollen toewijst binnen het bereik van de resourcegroep, omdat de meeste apps al hun Azure-resources groeperen in één resourcegroep.
Navigeer in Azure Portal naar de pagina Overzicht van de resourcegroep die uw app bevat.
Selecteer IAM- (Access Control) in het linkernavigatievenster.
Selecteer op de Toegangsbeheer (IAM) pagina, de optie + Toevoegen en kies vervolgens Roltoewijzing toevoegen uit de vervolgkeuzelijst. De pagina Roltoewijzing toevoegen bevat verschillende tabbladen voor het configureren en toewijzen van rollen.
Gebruik op het tabblad Rol het zoekvak om de rol te vinden die u wilt toewijzen. Selecteer de rol en kies vervolgens Volgende.
Op het tabblad Leden:
- Voor de Toegang tot waarde toewijzen, selecteert u gebruiker, groep of service-principal.
- Voor de leden waarde, kies + Selecteer leden om het deelvenster Selecteer leden te openen.
- Zoek naar de Microsoft Entra-groep die u eerder hebt gemaakt en selecteer deze in de gefilterde resultaten. Selecteer Selecteer om de groep te selecteren en het flyoutpaneel te sluiten.
- Selecteer Beoordelen en wijs onder aan het Leden tabblad toe.
Op het tabblad Review + assign, selecteer onderaan de pagina Review + assign.
De omgevingsvariabelen van de app instellen
Tijdens uitvoeringstijd zoeken bepaalde referenties uit de Azure Identity-bibliotheek, zoals DefaultAzureCredential
, EnvironmentCredential
en ClientSecretCredential
, naar serviceprincipal-informatie in de omgevingsvariabelen. Er zijn meerdere manieren om omgevingsvariabelen te configureren wanneer u met .NET werkt, afhankelijk van uw hulpprogramma's en omgeving.
Configureer, ongeacht de methode die u kiest, de volgende omgevingsvariabelen voor een service-principal:
-
AZURE_CLIENT_ID
: wordt gebruikt om de geregistreerde app in Azure te identificeren. -
AZURE_TENANT_ID
: de id van de Microsoft Entra-tenant. -
AZURE_CLIENT_SECRET
: de geheime referentie die is gegenereerd voor de app.
- Visual Studio
- Visual Studio Code
- Windows
In Visual Studio kunnen omgevingsvariabelen worden ingesteld in het launchsettings.json
bestand in de map Properties
van uw project. Deze waarden worden automatisch opgehaald wanneer de app wordt gestart. Deze configuraties reizen echter niet met uw app tijdens de implementatie, dus u moet omgevingsvariabelen instellen in uw doelhostingomgeving.
"profiles": {
"SampleProject": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://localhost:7177;http://localhost:5177",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"AZURE_CLIENT_ID": "<your-client-id>",
"AZURE_TENANT_ID":"<your-tenant-id>",
"AZURE_CLIENT_SECRET": "<your-client-secret>"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"AZURE_CLIENT_ID": "<your-client-id>",
"AZURE_TENANT_ID":"<your-tenant-id>",
"AZURE_CLIENT_SECRET": "<your-client-secret>"
}
}
}
Verifiëren bij Azure-services vanuit uw app
De Azure Identity-bibliotheek biedt verschillende referenties: implementaties van TokenCredential
aangepast aan de ondersteuning van verschillende scenario's en Microsoft Entra-verificatiestromen. In de volgende stappen ziet u hoe u ClientSecretCredential gebruikt bij het lokaal en in productie werken met service-principals.
De code implementeren
Voeg het pakket Azure.Identity toe. Installeer in een ASP.NET Core-project ook het pakket Microsoft.Extensions.Azure:
Navigeer in een terminal van uw keuze naar de projectmap van de toepassing en voer de volgende opdrachten uit:
dotnet add package Azure.Identity
dotnet add package Microsoft.Extensions.Azure
Azure-services worden geopend met behulp van gespecialiseerde clientklassen uit de verschillende Azure SDK-clientbibliotheken. Deze klassen en uw eigen aangepaste services moeten worden geregistreerd voor afhankelijkheidsinjectie, zodat ze in uw app kunnen worden gebruikt. Voer in Program.cs
de volgende stappen uit om een clientklasse te configureren voor afhankelijkheidsinjectie en verificatie op basis van tokens:
- Neem de
Azure.Identity
enMicrosoft.Extensions.Azure
naamruimten op viausing
instructies. - Registreer de Azure-serviceclient met behulp van de bijbehorende
Add
-voorvoegselextensiemethode. - Stel
ClientSecretCredential
in met detenantId
,clientId
enclientSecret
. - Geef het
ClientSecretCredential
exemplaar door aan de methodeUseCredential
.
builder.Services.AddAzureClients(clientBuilder =>
{
var tenantId = Environment.GetEnvironmentVariable("AZURE_TENANT_ID");
var clientId = Environment.GetEnvironmentVariable("AZURE_CLIENT_ID");
var clientSecret = Environment.GetEnvironmentVariable("AZURE_CLIENT_SECRET");
clientBuilder.AddBlobServiceClient(
new Uri("https://<account-name>.blob.core.windows.net"));
clientBuilder.UseCredential(new ClientSecretCredential(tenantId, clientId, clientSecret));
});
Een alternatief voor de UseCredential
methode is om de referentie rechtstreeks aan de serviceclient te verlenen.
var tenantId = Environment.GetEnvironmentVariable("AZURE_TENANT_ID");
var clientId = Environment.GetEnvironmentVariable("AZURE_CLIENT_ID");
var clientSecret = Environment.GetEnvironmentVariable("AZURE_CLIENT_SECRET");
builder.Services.AddSingleton<BlobServiceClient>(_ =>
new BlobServiceClient(
new Uri("https://<account-name>.blob.core.windows.net"),
new ClientSecretCredential(tenantId, clientId, clientSecret)));