Delen via


Verifiëren bij Azure-resources vanuit .NET-apps die on-premises worden gehost

Apps die buiten Azure worden gehost (bijvoorbeeld on-premises of in een datacenter van derden), moeten een service-principal voor toepassingen gebruiken voor verificatie bij Azure bij het openen van Azure-resources. Toepassingsservice-principalobjecten worden gemaakt met behulp van het app-registratieproces in Azure. Wanneer een toepassingsservice-principal wordt gemaakt, worden er een client-id en clientgeheim gegenereerd voor uw app. De client-id, het clientgeheim en uw tenant-id worden vervolgens opgeslagen in omgevingsvariabelen, zodat ze kunnen worden gebruikt door de Azure SDK voor .NET om uw app tijdens runtime bij Azure te verifiëren.

Er moet een andere app-registratie worden gemaakt voor elke omgeving waarin de app wordt gehost. Hierdoor kunnen omgevingsspecifieke resourcemachtigingen worden geconfigureerd voor elke service-principal en ervoor zorgen dat een app die in één omgeving is geïmplementeerd, niet praat met Azure-resources die deel uitmaken van een andere omgeving.

1 - De toepassing registreren in Azure

Een app kan worden geregistreerd bij Azure met behulp van Azure Portal of de 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 met het label App-registraties onder de kop Services in het menu dat onder de zoekbalk wordt weergegeven.
Een schermopname die laat zien hoe u de bovenste zoekbalk in Azure Portal gebruikt om naar de pagina App-registraties te zoeken en te navigeren.
Selecteer + Nieuwe registratie op de pagina App-registraties. Een schermopname van de locatie van de knop Nieuwe registratie op de pagina App-registraties.
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 en -omgeving (test, prod) waarvoor de app-registratie is bedoeld.
  2. Ondersteunde accounttypen → Accounts in deze organisatiemap.
Selecteer Registreren om uw app te registreren en de service-principal van de toepassing te maken.
Een schermopname die laat zien hoe u de pagina Een toepassing registreren kunt invullen door de app een naam te geven en ondersteunde accounttypen op te geven als alleen accounts in deze organisatiedirectory.
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.
Een schermopname van de pagina App-registratie nadat de app-registratie is voltooid. In deze schermopname ziet u de locatie van de toepassings-id en tenant-id die in een toekomstige stap nodig zijn. Ook wordt de locatie weergegeven van de koppeling die moet worden gebruikt om een toepassingsgeheim voor de app toe te voegen.
Selecteer + Nieuw clientgeheim op de pagina Certificaten en geheimen. Een schermopname van de locatie van de koppeling die moet worden gebruikt om een nieuw clientgeheim te maken op de pagina certificaten en geheimen.
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.

BELANGRIJK: Stel een herinnering in uw agenda in vóór de vervaldatum van het geheim. Op deze manier kunt u een nieuw geheim toevoegen vóór en uw apps bijwerken vóór de vervaldatum van dit geheim en een serviceonderbreking in uw app voorkomen.
Een schermopname van de pagina waar een nieuw clientgeheim wordt toegevoegd voor de toepassingsservice-principal die is gemaakt door het app-registratieproces.
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.
Een schermopname van de pagina met het gegenereerde clientgeheim.

2 - Rollen toewijzen aan de service-principal van de toepassing

Vervolgens moet u bepalen welke rollen (machtigingen) uw app nodig heeft voor welke resources en welke rollen aan uw app worden toegewezen. Rollen kunnen aan een resource, resourcegroep of abonnementsbereik worden toegewezen. In dit voorbeeld ziet u hoe u rollen toewijst voor de service-principal 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.
Een schermopname die laat zien hoe u het bovenste zoekvak in Azure Portal kunt gebruiken om naar de resourcegroep te gaan waaraan u rollen (machtigingen) wilt toewijzen.
Selecteer op de pagina voor de resourcegroep toegangsbeheer (IAM) in het menu aan de linkerkant. Een schermopname van de pagina resourcegroep met de locatie van het menu-item Toegangsbeheer (IAM).
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.
Een schermopname van het navigeren naar het tabblad Roltoewijzingen en de locatie van de knop die wordt gebruikt om roltoewijzingen toe te voegen aan een resourcegroep.
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.
Een schermopname van het filteren en selecteren van roltoewijzingen die moeten worden toegevoegd aan de resourcegroep.
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.
Een schermopname van het keuzerondje om een rol toe te wijzen aan een Azure AD-groep en de koppeling die wordt gebruikt om de groep te selecteren waaraan de rol moet worden toegewezen.
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 service-principal die u voor de app hebt gemaakt om de lijst te filteren.
  2. Selecteer de service-principal die aan uw toepassing is gekoppeld.
Selecteer Selecteren onderaan het dialoogvenster om door te gaan.
Een schermopname van het filteren op en selecteren van de Azure AD-groep voor de toepassing in het dialoogvenster Leden selecteren.
De service-principal 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.
Een schermopname van de voltooide pagina Roltoewijzing toevoegen en de locatie van de knop Beoordelen en toewijzen die wordt gebruikt om het proces te voltooien.

3 - Omgevingsvariabelen configureren voor toepassing

Het DefaultAzureCredential object zoekt tijdens runtime naar referenties 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.

Als uw app wordt gehost in IIS, is het raadzaam om omgevingsvariabelen per app-pool in te stellen om instellingen tussen toepassingen te isoleren.

appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso'].environmentVariables.[name='ASPNETCORE_ENVIRONMENT',value='Production']" /commit:apphost
appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso'].environmentVariables.[name='AZURE_CLIENT_ID',value='00000000-0000-0000-0000-000000000000']" /commit:apphost
appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso'].environmentVariables.[name='AZURE_TENANT_ID',value='11111111-1111-1111-1111-111111111111']" /commit:apphost
appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso'].environmentVariables.[name='AZURE_CLIENT_SECRET',value='=abcdefghijklmnopqrstuvwxyz']" /commit:apphost

U kunt deze instellingen ook rechtstreeks configureren met behulp van het applicationPools element in het applicationHost.config bestand.

<applicationPools>
   <add name="CorePool" managedRuntimeVersion="v4.0" managedPipelineMode="Classic">
      <environmentVariables>
         <add name="ASPNETCORE_ENVIRONMENT" value="Development" />
         <add name="AZURE_CLIENT_ID" value="00000000-0000-0000-0000-000000000000" />
         <add name="AZURE_TENANT_ID" value="11111111-1111-1111-1111-111111111111" />
         <add name="AZURE_CLIENT_SECRET" value="=abcdefghijklmnopqrstuvwxyz" />
      </environmentVariables>
   </add>
</applicationPools>

4 - DefaultAzureCredential implementeren in de 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.