Autentisera .NET-appar till Azure-tjänster med hjälp av .NET Azure SDK

När ett program behöver åtkomst till en Azure-resurs, till exempel lagring, nyckelvalv eller kognitiva tjänster, måste programmet autentiseras till Azure. Detta gäller för alla program, oavsett om de distribueras till Azure, distribueras lokalt eller under utveckling på en lokal arbetsstation för utvecklare. Den här artikeln beskriver de rekommenderade metoderna för att autentisera en app till Azure när du använder Azure SDK för .NET.

Vi rekommenderar att appar använder tokenbaserad autentisering i stället för anslutningssträng vid autentisering till Azure-resurser. Azure SDK för .NET tillhandahåller klasser som stöder tokenbaserad autentisering och gör det möjligt för appar att smidigt autentisera till Azure-resurser oavsett om appen är i lokal utveckling, distribueras till Azure eller distribueras till en lokal server.

Den specifika typen av tokenbaserad autentisering som en app ska använda för att autentisera till Azure-resurser beror på var appen körs och visas i följande diagram.

Ett diagram som visar de rekommenderade tokenbaserade autentiseringsstrategierna för en app beroende på var den körs.

  • När en utvecklare kör en app under lokal utveckling – Appen kan autentisera till Azure med antingen ett huvudnamn för programtjänsten för lokal utveckling eller med hjälp av utvecklarens Azure-autentiseringsuppgifter. Vart och ett av dessa alternativ beskrivs mer detaljerat i avsnittet autentisering under lokal utveckling.
  • När en app finns i Azure – Appen bör autentiseras mot Azure-resurser med hjälp av en hanterad identitet. Det här alternativet beskrivs mer detaljerat nedan i avsnittet autentisering i servermiljöer.
  • När en app hanteras och distribueras lokalt – Appen bör autentiseras mot Azure-resurser med hjälp av ett huvudnamn för programtjänsten. Det här alternativet beskrivs mer detaljerat nedan i avsnittet autentisering i servermiljöer.

StandardAzureCredential

Klassen DefaultAzureCredential som tillhandahålls av Azure SDK gör att appar kan använda olika autentiseringsmetoder beroende på vilken miljö de körs i. Detta gör att appar kan höjas upp från lokal utveckling till att testa miljöer till produktion utan kodändringar. Du konfigurerar lämplig autentiseringsmetod för varje miljö och DefaultAzureCredential identifierar och använder autentiseringsmetoden automatiskt. Du bör föredra att använda manuellt kodning av DefaultAzureCredential villkorslogik eller funktionsflaggor för att använda olika autentiseringsmetoder i olika miljöer.

Information om hur du DefaultAzureCredential använder klassen beskrivs senare i den här artikeln i avsnittet Använd DefaultAzureCredential i ett program.

Fördelar med tokenbaserad autentisering

Tokenbaserad autentisering rekommenderas starkt för användning av anslutningssträng när du skapar appar för Azure. Tokenbaserad autentisering ger följande fördelar jämfört med autentisering med anslutningssträng.

  • Med de tokenbaserade autentiseringsmetoder som beskrivs nedan kan du upprätta de specifika behörigheter som krävs av appen för Azure-resursen. Detta följer principen om minsta behörighet. Däremot ger en anslutningssträng fullständiga rättigheter till Azure-resursen.
  • Alla eller appar med en anslutningssträng kan ansluta till en Azure-resurs, men tokenbaserade autentiseringsmetoder omfattar åtkomst till resursen till endast de appar som är avsedda att komma åt resursen.
  • När det gäller en hanterad identitet finns det ingen programhemlighet att lagra. Detta gör appen säkrare eftersom det inte finns någon anslutningssträng eller programhemlighet än vad som kan komprometteras.
  • Azure.Identity-paketet i Azure SDK hanterar token åt dig i bakgrunden. Detta gör det enkelt att använda tokenbaserad autentisering som en anslutningssträng.

Användning av anslutningssträng bör begränsas till inledande konceptbevisappar eller utvecklingsprototyper som inte har åtkomst till produktionsdata eller känsliga data. Annars bör de tokenbaserade autentiseringsklasserna som är tillgängliga i Azure SDK alltid föredras när du autentiserar till Azure-resurser.

Autentisering i servermiljöer

När du är värd för en servermiljö ska varje program tilldelas en unik programidentitet per miljö som programmet körs i. I Azure representeras en appidentitet av ett huvudnamn för tjänsten, en särskild typ av säkerhetsobjekt som är avsett att identifiera och autentisera appar till Azure. Vilken typ av tjänsthuvudnamn som ska användas för din app beror på var appen körs.

Autentiseringsmetod beskrivning
Appar som finns i Azure Appar som finns i Azure bör använda tjänstens huvudnamn för hanterad identitet. Hanterade identiteter är utformade för att representera identiteten för en app som finns i Azure och kan endast användas med Azure-värdbaserade appar.

Till exempel skulle en .NET-webbapp som finns i Azure App Service tilldelas en hanterad identitet. Den hanterade identitet som tilldelats appen används sedan för att autentisera appen till andra Azure-tjänster.

Appar som finns utanför Azure
(till exempel lokala appar)
Appar som finns utanför Azure (till exempel lokala appar) som behöver ansluta till Azure-tjänster bör använda ett huvudnamn för programtjänsten. Ett huvudnamn för programtjänsten representerar appens identitet i Azure och skapas via programregistreringsprocessen.

Tänk dig till exempel en .NET-webbapp som finns lokalt och som använder Azure Blob Storage. Du skapar ett programtjänsthuvudnamn för appen med hjälp av appregistreringsprocessen. Alla AZURE_CLIENT_ID, AZURE_TENANT_IDoch AZURE_CLIENT_SECRET lagras som miljövariabler som ska läsas av programmet vid körning och göra det möjligt för appen att autentisera till Azure med programtjänstens huvudnamn.

Autentisering under lokal utveckling

När ett program körs på en utvecklares arbetsstation under den lokala utvecklingen måste det fortfarande autentiseras mot alla Azure-tjänster som används av appen. De två huvudsakliga strategierna för att autentisera appar till Azure under lokal utveckling är:

Autentiseringsmetod beskrivning
Skapa dedikerade huvudobjekt för programtjänsten som ska användas under lokal utveckling I den här metoden konfigureras dedikerade huvudobjekt för programtjänsten med hjälp av appregistreringsprocessen för användning under lokal utveckling. Identiteten för tjänstens huvudnamn lagras sedan som miljövariabler som ska användas av appen när den körs i lokal utveckling.

Med den här metoden kan du tilldela de specifika resursbehörigheter som krävs av appen till de objekt för tjänstens huvudnamn som används av utvecklare under den lokala utvecklingen. Detta säkerställer att programmet bara har åtkomst till de specifika resurser som behövs och replikerar de behörigheter som appen kommer att ha i produktion.

Nackdelen med den här metoden är behovet av att skapa separata objekt för tjänstens huvudnamn för varje utvecklare som fungerar i ett program.

Autentisera appen till Azure med utvecklarens autentiseringsuppgifter under den lokala utvecklingen I den här metoden måste en utvecklare loggas in på Azure från antingen Visual Studio, Azure Tools-tillägget för VS Code, Azure CLI eller Azure PowerShell på sin lokala arbetsstation. Programmet kan sedan komma åt utvecklarens autentiseringsuppgifter från autentiseringsarkivet och använda dessa autentiseringsuppgifter för att komma åt Azure-resurser från appen.

Den här metoden har fördelen med enklare konfiguration eftersom en utvecklare bara behöver logga in på sitt Azure-konto från Visual Studio, VS Code eller Azure CLI. Nackdelen med den här metoden är att utvecklarkontot sannolikt har fler behörigheter än vad som krävs av programmet. Den här metoden replikerar därför inte korrekt de behörigheter som appen ska köras med i produktion.

Använda DefaultAzureCredential i ett program

DefaultAzureCredential stöder flera autentiseringsmetoder och avgör vilken autentiseringsmetod som används vid körning. På så sätt kan din app använda olika autentiseringsmetoder i olika miljöer utan att implementera miljöspecifik kod.

Ordningen och platserna där DefaultAzureCredential du söker efter autentiseringsuppgifter finns i StandardAzureCredential.

Om du vill implementera DefaultAzureCredentiallägger du först till Azure.Identity och eventuellt paketen i Microsoft.Extensions.Azure ditt program. Du kan göra detta med antingen kommandoraden eller NuGet Package Manager.

Öppna valfri terminalmiljö i programprojektkatalogen och ange kommandot nedan.

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

Azure-tjänster används vanligtvis med motsvarande klientklasser från SDK:et. Dessa klasser och dina egna anpassade tjänster bör registreras i Program.cs filen så att de kan nås via beroendeinmatning i hela appen. Program.csI följer du stegen nedan för att konfigurera tjänsten och DefaultAzureCredential.

  1. Azure.Identity Inkludera namnrymderna och Microsoft.Extensions.Azure med en using-instruktion.
  2. Registrera Azure-tjänsten med relevanta hjälpmetoder.
  3. Skicka en instans av DefaultAzureCredential objektet till UseCredential -metoden.

Ett exempel på detta visas i följande kodsegment.

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());
});

Du kan också använda DefaultAzureCredential dina tjänster mer direkt utan hjälp av ytterligare Azure-registreringsmetoder, enligt nedan.

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()));

När koden ovan körs på din lokala arbetsstation under den lokala utvecklingen kommer den att titta i miljövariablerna efter ett huvudnamn för programtjänsten eller i Visual Studio, VS Code, Azure CLI eller Azure PowerShell för en uppsättning autentiseringsuppgifter för utvecklare, som kan användas för att autentisera appen till Azure-resurser under lokal utveckling.

När den här koden distribueras till Azure kan den ä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.

Utforska sekvensen med StandardAzureCredential-autentiseringsmetoder

Implementerar internt en kedja med autentiseringsprovidrar för att autentisera DefaultAzureCredential program till Azure-resurser. Varje autentiseringsprovider kan identifiera om autentiseringsuppgifter av den typen har konfigurerats för appen. DefaultAzureCredential kontrollerar varje provider i ordning och använder autentiseringsuppgifterna från den första providern som har konfigurerat autentiseringsuppgifter.

Ordningen och platserna där DefaultAzureCredential du söker efter autentiseringsuppgifter finns i StandardAzureCredential.

Typ av autentiseringsuppgifter beskrivning
Huvudnamn för programtjänsten DefaultAzureCredential läser en uppsättning miljövariabler för att avgöra om ett programtjänsthuvudnamn (programanvändare) har angetts för appen. I så fall DefaultAzureCredential använder du dessa värden för att autentisera appen till Azure.

Den här metoden används oftast i servermiljöer men kan också användas när du utvecklar lokalt.
Hanterad identitet Om programmet distribueras till en Azure-värd med hanterad identitet aktiverad DefaultAzureCredential autentiserar appen till Azure med den hanterade identiteten. Autentisering med hjälp av en hanterad identitet beskrivs i avsnittet Autentisering i servermiljöer i det här dokumentet.

Den här metoden är endast tillgänglig när ett program finns i Azure med hjälp av en tjänst som Azure App Service, Azure Functions eller Azure Virtual Machines.
Visual Studio Om utvecklaren har autentiserats till Azure genom att logga in på Visual Studio autentiserar DefaultAzureCredential appen till Azure med samma konto.
Visual Studio-koden Om utvecklaren har autentiserats till Azure med hjälp av plugin-programmet DefaultAzureCredential Visual Studio Code Azure-konto autentiserar du appen till Azure med samma konto.
Azure CLI Om en utvecklare har autentiserats az login till Azure med hjälp av kommandot i Azure CLI autentiserar DefaultAzureCredential appen till Azure med samma konto.
Azure PowerShell Om en utvecklare har autentiserats till Azure med hjälp av cmdleten Connect-AzAccount från Azure PowerShell autentiserar DefaultAzureCredential appen till Azure med samma konto.
Interaktivt Om det är aktiverat DefaultAzureCredential autentiserar utvecklaren interaktivt via det aktuella systemets standardwebbläsare. Det här alternativet är inaktiverat som standard.