.NET-apps verifiëren bij Azure-services tijdens lokale ontwikkeling met behulp van service-principals
Ontwikkelaars moeten fouten opsporen en testen op cloud-apps op hun lokale werkstation. Wanneer een app wordt uitgevoerd op het werkstation van een ontwikkelaar tijdens de lokale ontwikkeling, moet deze nog steeds worden geverifieerd bij alle Azure-services die door de app worden gebruikt. In dit artikel wordt beschreven hoe u service-principalobjecten voor toegewezen toepassingen instelt die moeten worden gebruikt tijdens lokale ontwikkeling.
Met speciale toepassingsservice-principals voor lokale ontwikkeling kunt u het principe van minimale bevoegdheden tijdens het ontwikkelen van apps volgen. Omdat machtigingen zijn afgestemd op precies wat er nodig is voor de app tijdens de ontwikkeling, wordt voorkomen dat app-code per ongeluk toegang krijgt tot een Azure-resource die is bedoeld voor gebruik door een andere app. Dit voorkomt ook dat er fouten optreden wanneer de app naar productie wordt verplaatst omdat de app te veel bevoegdheden heeft in de ontwikkelomgeving.
Een toepassingsservice-principal wordt ingesteld voor de app wanneer de app is geregistreerd in Azure. Wanneer u een app registreert voor lokale ontwikkeling, is het raadzaam het volgende te doen:
- Maak een afzonderlijke app-registratie voor elke ontwikkelaar die aan de app werkt. Hiermee maakt u afzonderlijke toepassingsservice-principals voor elke ontwikkelaar die moet worden gebruikt tijdens de lokale ontwikkeling en voorkomt u dat ontwikkelaars referenties voor één toepassingsservice-principal moeten delen.
- Maak een afzonderlijke app-registratie per app. Hiermee worden de machtigingen van de app alleen bereikt voor wat de app nodig heeft.
Tijdens lokale ontwikkeling worden omgevingsvariabelen ingesteld met de identiteit van de toepassingsservice-principal. De Azure Identity-bibliotheek leest deze omgevingsvariabelen en gebruikt deze informatie om de app te verifiëren bij de Azure-resources die nodig zijn.
1 - De toepassing registreren in Azure
Toepassingsservice-principalobjecten worden gemaakt met een app-registratie in Azure. U kunt dit doen met behulp van Azure Portal of Azure CLI.
Meld u aan bij Azure Portal en volg deze stappen.
2 - Microsoft Entra-groep maken voor lokale ontwikkeling
Aangezien er doorgaans meerdere ontwikkelaars zijn die aan een app werken, is het raadzaam om een Microsoft Entra-groep te maken 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 weet zeker dat dezelfde rollen zijn toegewezen omdat rollen op groepsniveau worden toegewezen.
- 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.
3 - Rollen toewijzen aan de toepassing
Bepaal vervolgens welke rollen (machtigingen) uw app nodig heeft voor welke resources en wijs deze rollen toe aan uw app. In dit voorbeeld worden de rollen toegewezen aan de Microsoft Entra-groep die in stap 2 is gemaakt. Aan groepen kan een rol worden toegewezen voor een resource, resourcegroep of abonnementsbereik. 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.
4 - Omgevingsvariabelen voor toepassingen instellen
Tijdens runtime DefaultAzureCredential
wordt gezocht naar de informatie van de service-principal in een verzameling 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 bij het werken met een service-principal:
AZURE_CLIENT_ID
→ de waarde van de app-id.AZURE_TENANT_ID
→ de waarde van de tenant-id.AZURE_CLIENT_SECRET
→ het wachtwoord/de referentie die voor de app is gegenereerd.
Wanneer u lokaal werkt met Visual Studio, kunnen omgevingsvariabelen worden ingesteld in het launchsettings.json
bestand in de Properties
map van uw project. Wanneer de app wordt gestart, worden deze waarden automatisch opgehaald. Houd er rekening mee dat deze configuraties niet met uw app reizen wanneer deze wordt geïmplementeerd, 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": "00000000-0000-0000-0000-000000000000",
"AZURE_TENANT_ID":"11111111-1111-1111-1111-111111111111",
"AZURE_CLIENT_SECRET": "=abcdefghijklmnopqrstuvwxyz"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"AZURE_CLIENT_ID": "00000000-0000-0000-0000-000000000000",
"AZURE_TENANT_ID": "11111111-1111-1111-1111-111111111111",
"AZURE_CLIENT_SECRET": "=abcdefghijklmnopqrstuvwxyz"
}
}
}
5 - DefaultAzureCredential implementeren in uw toepassing
DefaultAzureCredential is een geordende volgorde van mechanismen voor verificatie bij Microsoft Entra. Elk verificatiemechanisme is een klasse die is afgeleid van de TokenCredential-klasse en wordt een referentie genoemd. Tijdens runtime DefaultAzureCredential
wordt geprobeerd om te verifiëren met behulp van de eerste referentie. Als deze referentie geen toegangstoken kan verkrijgen, wordt de volgende referentie in de reeks geprobeerd, enzovoort, totdat een toegangstoken is verkregen. Op deze manier kan uw app verschillende referenties in verschillende omgevingen gebruiken zonder omgevingsspecifieke code te schrijven.
De volgorde en locaties waarin DefaultAzureCredential
wordt gezocht naar referenties, vindt u op DefaultAzureCredential.
Als u dit wilt gebruiken DefaultAzureCredential
, voegt u de Azure.Identity en eventueel de Microsoft.Extensions.Azure-pakketten toe aan uw toepassing:
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, zodat ze kunnen worden geopend via afhankelijkheidsinjectie in uw app. Voer Program.cs
in de volgende stappen de volgende stappen uit om een clientklasse te registreren en DefaultAzureCredential
:
- Neem de
Azure.Identity
enMicrosoft.Extensions.Azure
naamruimten op viausing
instructies. - Registreer de Azure-serviceclient met behulp van de bijbehorende
Add
-voorvoegselextensiemethode. - Geef een exemplaar van
DefaultAzureCredential
deUseCredential
methode door.
Voorbeeld:
using Microsoft.Extensions.Azure;
using Azure.Identity;
builder.Services.AddAzureClients(clientBuilder =>
{
clientBuilder.AddBlobServiceClient(
new Uri("https://<account-name>.blob.core.windows.net"));
clientBuilder.UseCredential(new DefaultAzureCredential());
});
Een alternatief UseCredential
is om rechtstreeks te instantiëren DefaultAzureCredential
:
using Azure.Identity;
builder.Services.AddSingleton<BlobServiceClient>(_ =>
new BlobServiceClient(
new Uri("https://<account-name>.blob.core.windows.net"),
new DefaultAzureCredential()));
Wanneer de voorgaande code wordt uitgevoerd op uw lokale ontwikkelwerkstation, wordt er gezocht in de omgevingsvariabelen voor een toepassingsservice-principal of in lokaal geïnstalleerde ontwikkelhulpprogramma's, zoals Visual Studio, voor een set ontwikkelaarsreferenties. Beide benaderingen kunnen worden gebruikt om de app te verifiëren bij Azure-resources tijdens lokale ontwikkeling.
Wanneer deze code wordt geïmplementeerd in Azure, kan dezelfde code uw app ook verifiëren bij andere Azure-resources. DefaultAzureCredential
kan omgevingsinstellingen en beheerde identiteitsconfiguraties ophalen om automatisch te verifiëren bij andere services.