NET-apps verifiëren bij Azure-services tijdens lokale ontwikkeling met behulp van service-principals

Bij het maken van cloudtoepassingen moeten ontwikkelaars fouten opsporen en toepassingen testen op hun lokale werkstation. Wanneer een toepassing 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.

A diagram showing how a .NET app during local development will use the developer's credentials to connect to Azure by obtaining those credentials locally installed development tools.

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 is gemachtigd in de ontwikkelomgeving.

Een toepassingsservice-principal wordt ingesteld voor de app wanneer de app is geregistreerd in Azure. Bij het registreren van apps voor lokale ontwikkeling is het raadzaam het volgende te doen:

  • Maak afzonderlijke app-registraties 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.
  • Afzonderlijke app-registraties per app maken. 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 SDK voor NET 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.

Instructies Schermafbeelding
In Azure Portal:
  1. Voer app-registraties in in de zoekbalk bovenaan Azure Portal.
  2. Selecteer het item App-registraties onder de kop Services in het menu dat onder de zoekbalk wordt weergegeven.
A screenshot showing how to use the top search bar in the Azure portal to find and navigate to the App registrations page.
Selecteer + Nieuwe registratie op de pagina App-registraties. A screenshot showing the location of the New registration button in the App registrations page.
Vul op de pagina Een toepassing registreren het formulier als volgt in.
  1. Naam → Voer een naam in voor de app-registratie in Azure. Het wordt aanbevolen deze naam op te nemen, zoals de app-naam, de gebruiker waarvoor de app-registratie is bedoeld en een id zoals 'dev' om aan te geven dat deze app-registratie moet worden gebruikt in lokale ontwikkeling.
  2. Ondersteunde accounttypen → Accounts in deze organisatiemap.
Selecteer Registreren om uw app te registreren en de service-principal van de toepassing te maken.
A screenshot showing how to fill out the Register an application page by giving the app a name and specifying supported account types as accounts in this organizational directory only.
Op de pagina App-registratie voor uw app:
  1. Toepassings-id (client) → Dit is de app-id die de app gebruikt voor toegang tot Azure tijdens de lokale ontwikkeling. Kopieer deze waarde naar een tijdelijke locatie in een teksteditor, omdat u deze in een toekomstige stap nodig hebt.
  2. Directory-id (tenant) → Deze waarde is ook nodig voor uw app wanneer deze wordt geverifieerd bij Azure. Kopieer deze waarde naar een tijdelijke locatie in een teksteditor. Deze is ook nodig in een toekomstige stap.
  3. Clientreferenties → U moet de clientreferenties voor de app instellen voordat uw app kan worden geverifieerd bij Azure en Azure-services kunt gebruiken. Selecteer Een certificaat of geheim toevoegen om referenties voor uw app toe te voegen.
A screenshot of the App registration page after the app registration has been completed. This screenshot shows the location of the application ID and tenant ID, which will be needed in a future step. It also shows the location of the link to use to add an application secret for the app.
Selecteer + Nieuw clientgeheim op de pagina Certificaten en geheimen. A screenshot showing the location of the link to use to create a new client secret on the certificates and secrets page.
Het dialoogvenster Een clientgeheim toevoegen wordt weergegeven aan de rechterkant van de pagina. In dit dialoogvenster:
  1. Beschrijving → Voer een waarde van Current in.
  2. Verloopt → Selecteer een waarde van 24 maanden.
Selecteer Toevoegen om het geheim toe te voegen.
A screenshot showing the page where a new client secret is added for the application service principal create by the app registration process.
Op de pagina Certificaten en geheimen wordt de waarde van het clientgeheim weergegeven.

Kopieer deze waarde naar een tijdelijke locatie in een teksteditor, omdat u deze in een toekomstige stap nodig hebt.

BELANGRIJK: Dit is de enige keer dat u deze waarde ziet. Zodra u deze pagina verlaat of vernieuwt, kunt u deze waarde niet meer zien. U kunt een extra clientgeheim toevoegen zonder dit clientgeheim ongeldig te maken, maar u ziet deze waarde niet opnieuw.
A screenshot showing the page with the generated client secret.

2 - Een Azure AD-beveiligingsgroep maken voor lokale ontwikkeling

Aangezien er doorgaans meerdere ontwikkelaars zijn die aan een toepassing werken, is het raadzaam om een Azure AD-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. Dit 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 te worden toegevoegd aan de Azure AD-groep voor de app.
  • 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.
Instructies Schermafbeelding
Navigeer naar de Azure Active Directory-pagina in Azure Portal door Azure Active Directory in het zoekvak boven aan de pagina te typen en vervolgens Azure Active Directory te selecteren onder services. A screenshot showing how to use the top search bar in the Azure portal to search for and navigate to the Azure Active Directory page.
Selecteer Groepen in het linkermenu op de pagina Azure Active Directory. A screenshot showing the location of the Groups menu item in the left-hand menu of the Azure Active Directory Default Directory page.
Selecteer Nieuwe groep op de pagina Alle groepen. A screenshot showing the location of the New Group button in the All groups page.
Op de pagina Nieuwe groep :
  1. GroepstypeBeveiliging
  2. Groepsnaam → A-naam voor de beveiligingsgroep, meestal gemaakt op basis van de naam van de toepassing. Het is ook handig om een tekenreeks zoals local-dev op te nemen in de naam van de groep om het doel van de groep aan te geven.
  3. Groepsbeschrijving → Een beschrijving van het doel van de groep.
  4. Selecteer de koppeling Geen leden geselecteerd onder Leden om leden toe te voegen aan de groep.
A screenshot showing how to fill out the form to create a new Azure Active Directory group for the application. This screenshot also shows the location of the link to select to add members to this group.
In het dialoogvenster Leden toevoegen:
  1. Gebruik het zoekvak om de lijst met principal-namen in de lijst te filteren.
  2. Selecteer de toepassingsservice-principals voor lokale ontwikkeling voor deze app. Wanneer objecten worden geselecteerd, worden ze grijs weergegeven en verplaatst u naar de lijst met geselecteerde items onder aan het dialoogvenster.
  3. Wanneer u klaar bent, selecteert u de knop Selecteren .
A screenshot of the Add members dialog box showing how to select application service principals to be included in the group.
Selecteer Op de pagina Nieuwe groep maken de optie Maken om de groep te maken.

De groep wordt gemaakt en u gaat terug naar de pagina Alle groepen . Het kan tot 30 seconden duren voordat de groep wordt weergegeven en mogelijk moet u de pagina vernieuwen vanwege caching in Azure Portal.
A screenshot of the New Group page showing how to complete the process by selecting the Create button.

3 - Rollen toewijzen aan de toepassing

Vervolgens moet u bepalen welke rollen (machtigingen) uw app nodig heeft voor welke resources en welke rollen aan uw app worden toegewezen. In dit voorbeeld worden de rollen toegewezen aan de Azure Active Directory-groep die in stap 2 is gemaakt. Rollen kunnen aan een resource, resourcegroep of abonnementsbereik worden toegewezen. In dit voorbeeld ziet u hoe u rollen toewijst binnen het bereik van de resourcegroep, omdat de meeste toepassingen al hun Azure-resources groeperen in één resourcegroep.

Instructies Schermafbeelding
Zoek de resourcegroep voor uw toepassing door te zoeken naar de naam van de resourcegroep met behulp van het zoekvak boven aan Azure Portal.

Navigeer naar uw resourcegroep door de naam van de resourcegroep te selecteren onder de kop Resourcegroepen in het dialoogvenster.
A screenshot showing how to use the top search box in the Azure portal to locate and navigate to the resource group you want to assign roles (permissions) to.
Selecteer op de pagina voor de resourcegroep toegangsbeheer (IAM) in het menu aan de linkerkant. A screenshot of the resource group page showing the location of the Access control (IAM) menu item.
Op de pagina Toegangsbeheer (IAM):
  1. Selecteer het tabblad Roltoewijzingen.
  2. Selecteer + Toevoegen in het bovenste menu en voeg vervolgens roltoewijzing toe in de resulterende vervolgkeuzelijst.
A screenshot showing how to navigate to the role assignments tab and the location of the button used to add role assignments to a resource group.
De pagina Roltoewijzing toevoegen bevat alle rollen die kunnen worden toegewezen voor de resourcegroep.
  1. Gebruik het zoekvak om de lijst te filteren op een beter beheerbare grootte. In dit voorbeeld ziet u hoe u filtert op Storage Blob-rollen.
  2. Selecteer de rol die u wilt toewijzen.
Selecteer Volgende om naar het volgende scherm te gaan.
A screenshot showing how to filter and select role assignments to be added to the resource group.
Op de volgende pagina Roltoewijzing toevoegen kunt u opgeven aan welke gebruiker de rol moet toewijzen.
  1. Selecteer Gebruiker, groep of service-principal onder Toegang toewijzen aan.
  2. Selecteer + Leden selecteren onder Leden
Aan de rechterkant van Azure Portal wordt een dialoogvenster geopend.
A screenshot showing the radio button to select to assign a role to an Azure AD group and the link used to select the group to assign the role to.
In het dialoogvenster Leden selecteren :
  1. Het tekstvak Selecteren kan worden gebruikt om de lijst met gebruikers en groepen in uw abonnement te filteren. Typ indien nodig de eerste paar tekens van de Azure AD-groep voor lokale ontwikkeling die u voor de app hebt gemaakt.
  2. Selecteer de Azure AD-groep voor lokale ontwikkeling die is gekoppeld aan uw toepassing.
Selecteer Selecteren onderaan het dialoogvenster om door te gaan.
A screenshot showing how to filter for and select the Azure AD group for the application in the Select members dialog box.
De Azure AD-groep wordt nu weergegeven als geselecteerd in het scherm Roltoewijzing toevoegen.

Selecteer Beoordelen + toewijzen om naar de laatste pagina te gaan en vervolgens opnieuw beoordelen en toewijzen om het proces te voltooien.
A screenshot showing the completed Add role assignment page and the location of the Review + assign button used to complete the process.

4 - Omgevingsvariabelen voor toepassingen instellen

Het DefaultAzureCredential object zoekt tijdens runtime naar de informatie van de service-principal in een set omgevingsvariabelen. Er zijn meerdere manieren om omgevingsvariabelen te configureren wanneer u met .NET werkt, afhankelijk van uw hulpprogramma's en omgeving.

Ongeacht welke benadering u kiest, moet u de volgende omgevingsvariabelen configureren wanneer u met een service-principal werkt.

  • 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 toepassing reizen wanneer deze wordt geïmplementeerd, dus u moet nog steeds 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 ondersteunt meerdere verificatiemethoden en bepaalt de verificatiemethode die tijdens runtime wordt gebruikt. Op deze manier kan uw app verschillende verificatiemethoden in verschillende omgevingen gebruiken zonder omgevingsspecifieke code te implementeren.

De volgorde en locaties waarin DefaultAzureCredential wordt gezocht naar referenties, vindt u op DefaultAzureCredential.

Als u wilt implementeren DefaultAzureCredential, voegt u eerst de Azure.Identity en eventueel de Microsoft.Extensions.Azure pakketten toe aan uw toepassing. U kunt dit doen met behulp van de opdrachtregel of de NuGet-Pakketbeheer.

Open een terminalomgeving naar keuze in de projectmap van de toepassing en voer de onderstaande opdracht in.

dotnet add package Azure.Identity
dotnet add package Microsoft.Extensions.Azure

Azure-services worden over het algemeen geopend met behulp van bijbehorende clientklassen van de SDK. Deze klassen en uw eigen aangepaste services moeten worden geregistreerd in het Program.cs bestand, zodat ze kunnen worden geopend via afhankelijkheidsinjectie in uw app. Program.csVolg de onderstaande stappen om uw service en DefaultAzureCredential.

  1. Neem de Azure.Identity en Microsoft.Extensions.Azure naamruimten op met een using-instructie.
  2. Registreer de Azure-service met behulp van relevante helpermethoden.
  3. Geef een exemplaar van het DefaultAzureCredential object door aan de UseCredential methode.

Een voorbeeld hiervan wordt weergegeven in het volgende codesegment.

using Microsoft.Extensions.Azure;
using Azure.Identity;

// Inside of Program.cs
builder.Services.AddAzureClients(x =>
{
    x.AddBlobServiceClient(new Uri("https://<account-name>.blob.core.windows.net"));
    x.UseCredential(new DefaultAzureCredential());
});

U kunt ook rechtstreeks in uw services gebruikmaken DefaultAzureCredential zonder de hulp van aanvullende Azure-registratiemethoden, zoals hieronder wordt weergegeven.

using Azure.Identity;

// Inside of Program.cs
builder.Services.AddSingleton<BlobServiceClient>(x => 
    new BlobServiceClient(
        new Uri("https://<account-name>.blob.core.windows.net"),
        new DefaultAzureCredential()));

Wanneer de bovenstaande code wordt uitgevoerd op uw lokale werkstation tijdens de lokale ontwikkeling, wordt er gezocht in de omgevingsvariabelen voor een toepassingsservice-principal of in Visual Studio, VS Code, de Azure CLI of Azure PowerShell voor een set ontwikkelaarsreferenties, die beide kunnen worden gebruikt om de app tijdens lokale ontwikkeling te verifiëren bij Azure-resources.

Wanneer deze code in Azure wordt geïmplementeerd, kan uw app ook worden geverifieerd bij andere Azure-resources. DefaultAzureCredential kan omgevingsinstellingen en beheerde identiteitsconfiguraties ophalen om automatisch te verifiëren bij andere services.