Autentisera till Azure-resurser från .NET-appar som finns lokalt
Appar som finns utanför Azure (till exempel lokalt eller i ett datacenter från tredje part) bör använda ett huvudnamn för programtjänsten för att autentisera till Azure vid åtkomst till Azure-resurser. Huvudobjekt för programtjänsten skapas med hjälp av appregistreringsprocessen i Azure. När ett huvudnamn för programtjänsten skapas genereras ett klient-ID och en klienthemlighet för din app. Klient-ID, klienthemlighet och ditt klient-ID lagras sedan i miljövariabler så att de kan användas av Azure Identity-biblioteket för att autentisera din app till Azure vid körning.
En annan appregistrering ska skapas för varje miljö som appen finns i. På så sätt kan miljöspecifika resursbehörigheter konfigureras för varje huvudnamn för tjänsten och se till att en app som distribueras till en miljö inte kommunicerar med Azure-resurser som ingår i en annan miljö.
1 – Registrera programmet i Azure
En app kan registreras med Azure med hjälp av antingen Azure-portalen eller Azure CLI.
Logga in på Azure-portalen och följ dessa steg.
2 – Tilldela roller till programtjänstens huvudnamn
Därefter måste du bestämma vilka roller (behörigheter) din app behöver på vilka resurser och tilldela dessa roller till din app. Roller kan tilldelas en roll i ett resurs-, resursgrupps- eller prenumerationsomfång. Det här exemplet visar hur du tilldelar roller för tjänstens huvudnamn i resursgruppens omfång, eftersom de flesta appar grupperar alla sina Azure-resurser i en enda resursgrupp.
3 – Konfigurera miljövariabler för program
Objektet DefaultAzureCredential
söker efter autentiseringsuppgifter för tjänstens huvudnamn i en uppsättning miljövariabler vid körning. Det finns flera sätt att konfigurera miljövariabler när du arbetar med .NET beroende på verktyg och miljö.
Oavsett vilken metod du väljer konfigurerar du följande miljövariabler när du arbetar med tjänstens huvudnamn:
AZURE_CLIENT_ID
→ App-ID-värdet.AZURE_TENANT_ID
→ Klientorganisations-ID-värdet.AZURE_CLIENT_SECRET
→ Lösenordet/autentiseringsuppgifterna som genereras för appen.
Om din app finns i IIS rekommenderar vi att du anger miljövariabler per apppool för att isolera inställningar mellan appar.
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
Du kan också konfigurera de här inställningarna direkt med elementet applicationPools
inuti applicationHost.config
filen:
<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 – Implementera DefaultAzureCredential i ditt program
DefaultAzureCredential är en åsiktsbaserad, ordnad sekvens med mekanismer för autentisering till Microsoft Entra. Varje autentiseringsmekanism är en klass som härleds från klassen TokenCredential och kallas för en autentiseringsuppgift. Vid körning DefaultAzureCredential
försöker autentisera med hjälp av den första autentiseringsuppgiften. Om det inte går att hämta en åtkomsttoken görs nästa autentiseringsuppgifter i sekvensen och så vidare tills en åtkomsttoken har hämtats. På så sätt kan din app använda olika autentiseringsuppgifter i olika miljöer utan att skriva miljöspecifik kod.
Ordningen och platserna där DefaultAzureCredential
du söker efter autentiseringsuppgifter finns i StandardAzureCredential.
Om du vill använda DefaultAzureCredential
lägger du till Azure.Identity och eventuellt Microsoft.Extensions.Azure-paketen i ditt program:
I valfri terminal går du till programprojektkatalogen och kör följande kommandon:
dotnet add package Azure.Identity
dotnet add package Microsoft.Extensions.Azure
Azure-tjänster används med hjälp av specialiserade klientklasser från de olika Azure SDK-klientbiblioteken. Dessa klasser och dina egna anpassade tjänster bör registreras så att de kan nås via beroendeinmatning i hela appen. I Program.cs
utför du följande steg för att registrera en klientklass och DefaultAzureCredential
:
Azure.Identity
Inkludera namnrymderna ochMicrosoft.Extensions.Azure
viausing
direktiv.- Registrera Azure-tjänstklienten med hjälp av motsvarande
Add
-prefixed extension-metod. - Skicka en instans av
DefaultAzureCredential
tillUseCredential
-metoden.
Till exempel:
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());
});
Ett alternativ till UseCredential
är att instansiera DefaultAzureCredential
direkt:
using Azure.Identity;
builder.Services.AddSingleton<BlobServiceClient>(_ =>
new BlobServiceClient(
new Uri("https://<account-name>.blob.core.windows.net"),
new DefaultAzureCredential()));
När föregående kod körs på din lokala utvecklingsarbetsstation letar den i miljövariablerna efter ett huvudnamn för programtjänsten eller lokalt installerade utvecklarverktyg, till exempel Visual Studio, för en uppsättning autentiseringsuppgifter för utvecklare. Endera metoden kan användas för att autentisera appen till Azure-resurser under lokal utveckling.
När den distribueras till Azure kan samma kod även autentisera din app till andra Azure-resurser. DefaultAzureCredential
kan hämta miljöinställningar och hanterade identitetskonfigurationer för att autentisera till andra tjänster automatiskt.