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.
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.
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.cs
Volg de onderstaande stappen om uw service en DefaultAzureCredential
.
- Neem de
Azure.Identity
enMicrosoft.Extensions.Azure
naamruimten op met eenusing
instructie. - Registreer de Azure-service met behulp van relevante helpermethoden.
- Geef een exemplaar van het
DefaultAzureCredential
object door aan deUseCredential
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.
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor