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 via Microsoft Entra-ID för att autentisera till Azure-tjänster. I de kommande avsnitten lär du dig:
- Så här registrerar du en applikation med Microsoft Entra för att skapa ett tjänsthuvudnamn
- Hur man tilldelar roller för behörigheter inom omfånget
- Autentisera med tjänstens huvudnamn från din appkod
Med dedikerade huvudnamn för programtjänsten kan du följa principen om lägsta behörighet när du får åtkomst till Azure-resurser. Behörigheter är begränsade till de specifika kraven för appen under utvecklingen, vilket förhindrar oavsiktlig åtkomst till Azure-resurser som är avsedda för andra appar eller tjänster. Den här metoden hjälper också till att undvika problem när appen flyttas till produktion genom att se till att den inte är överprivilegierad i utvecklingsmiljön.
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ö.
Registrera appen i Azure
Huvudobjekt för programtjänsten skapas via en appregistrering i Azure med hjälp av antingen Azure-portalen eller Azure CLI.
I Azure-portalen använder du sökfältet för att navigera till sidan Appregistreringar.
På sidan Appregistreringar väljer du + Ny registrering.
På sidan Registrera ett program:
- För fältet Namn anger du ett beskrivande värde som innehåller appnamnet och målmiljön.
- För kontotyper som stödsväljer du endast Konton i den här organisationskatalogen (endast Microsoft Customer Led – Enskild klientorganisation)eller vilket alternativ som passar bäst för dina behov.
Välj Registrera för att registrera din app och skapa tjänstens huvudnamn.
På sidan Appregistrering för din app kopierar du -ID:t (klient)-ID:t och Directory-ID (klientorganisation) och klistrar in dem på en tillfällig plats för senare användning i appkodkonfigurationerna.
Välj Lägg till ett certifikat eller en hemlig för att konfigurera autentiseringsuppgifter för din app.
På sidan Certifikat och hemligheter väljer du + Ny klienthemlighet.
I Lägg till en klienthemlighet utfällbara panelen som öppnas:
- För beskrivning anger du värdet Nuvarande.
- För värdet Upphör att gälla lämnar du det rekommenderade standardvärdet på 180 dagar.
- Välj Lägg till för att lägga till hemligheten.
På sidan certifikat & hemligheter kopierar du klienthemlighetens egenskap Value för användning i ett framtida steg.
Not
Värdet för klienthemlighet visas bara en gång efter att appregistreringen har skapats. Du kan lägga till fler klienthemligheter utan att ogiltigförklara den här klienthemligheten, men det går inte att visa det här värdet igen.
Tilldela roller till programtjänstens serviceprincipaler
Bestäm sedan vilka roller (behörigheter) din app behöver på vilka resurser och tilldela dessa roller till tjänstens huvudnamn som du skapade. Roller kan tilldelas på resurs-, resursgrupps- eller prenumerationsomfångsnivån. Det här exemplet visar hur du tilldelar roller i resursgruppens omfång, eftersom de flesta appar grupperar alla sina Azure-resurser i en enda resursgrupp.
- Azure-portalen
- Azure CLI
I Azure-portalen går du till sidan Översikt i resursgruppen som innehåller din app.
Välj åtkomstkontroll (IAM) i det vänstra navigeringsfältet.
På sidan Åtkomstkontroll (IAM) väljer du + Lägg till och väljer sedan Lägg till rolltilldelning på den nedrullningsbara menyn. Sidan Lägg till rolltilldelning innehåller flera flikar för att konfigurera och tilldela roller.
På fliken Roll använder du sökrutan för att hitta den roll som du vill tilldela. Välj rollen och välj sedan Nästa.
På fliken Medlemmar:
- För värdet Tilldela åtkomst till väljer du Användare, grupp eller tjänstens huvudnamn .
- För värdet Medlemmar väljer du + Välj medlemmar för att öppna Välj medlemmar utfällbara panelen.
- Sök efter tjänstens huvudnamn som du skapade tidigare och välj det från de filtrerade resultaten. Välj Välj för att välja gruppen och stänga den utfällbara panelen.
- Välj Granska + tilldela längst ned på fliken Medlemmar.
På fliken Granska + tilldela väljer du Granska + tilldela längst ned på sidan.
Ange appmiljövariablerna
Vid körning söker vissa autentiseringsuppgifter från Azure Identity-biblioteket, till exempel DefaultAzureCredential
, EnvironmentCredential
och ClientSecretCredential
, efter tjänstens huvudkontouppgifter enligt konvention i miljövariablerna. 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 för tjänstens huvudnamn:
-
AZURE_CLIENT_ID
: Används för att identifiera den registrerade appen i Azure. -
AZURE_TENANT_ID
: ID för Microsoft Entra-hyresgästen. -
AZURE_CLIENT_SECRET
: Den hemliga autentiseringsuppgift som genererades för appen.
I Visual Studio kan miljövariabler anges i filen launchsettings.json
i mappen Properties
i projektet. Dessa värden hämtas automatiskt när appen startar. De här konfigurationerna följer dock inte med din app under distributionen, så du måste konfigurera miljövariabler i målvärdmiljön.
"profiles": {
"SampleProject": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://localhost:7177;http://localhost:5177",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"AZURE_CLIENT_ID": "<your-client-id>",
"AZURE_TENANT_ID":"<your-tenant-id>",
"AZURE_CLIENT_SECRET": "<your-client-secret>"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"AZURE_CLIENT_ID": "<your-client-id>",
"AZURE_TENANT_ID":"<your-tenant-id>",
"AZURE_CLIENT_SECRET": "<your-client-secret>"
}
}
}
Autentisera till Azure-tjänster från din app
Azure Identity-biblioteket innehåller olika autentiseringsuppgifter– implementeringar av TokenCredential
anpassade för att stödja olika scenarier och Microsoft Entra-autentiseringsflöden. Stegen framåt visar hur du använder ClientSecretCredential när du arbetar med tjänstens huvudnamn lokalt och i produktion.
Implementera koden
Lägg till paketet Azure.Identity. I ett ASP.NET Core-projekt installerar du även paketet Microsoft.Extensions.Azure:
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 för beroendeinmatning så att de kan användas i hela appen. I Program.cs
utför du följande steg för att konfigurera en klientklass för beroendeinmatning och tokenbaserad autentisering:
- Inkludera
Azure.Identity
ochMicrosoft.Extensions.Azure
namnrymder viausing
direktiv. - Registrera Azure-tjänstklienten med hjälp av motsvarande
Add
-prefixerade extensionsmetod. - Konfigurera
ClientSecretCredential
medtenantId
,clientId
ochclientSecret
. - Skicka
ClientSecretCredential
-instansen till metodenUseCredential
.
builder.Services.AddAzureClients(clientBuilder =>
{
var tenantId = Environment.GetEnvironmentVariable("AZURE_TENANT_ID");
var clientId = Environment.GetEnvironmentVariable("AZURE_CLIENT_ID");
var clientSecret = Environment.GetEnvironmentVariable("AZURE_CLIENT_SECRET");
clientBuilder.AddBlobServiceClient(
new Uri("https://<account-name>.blob.core.windows.net"));
clientBuilder.UseCredential(new ClientSecretCredential(tenantId, clientId, clientSecret));
});
Ett alternativ till metoden UseCredential
är att tillhandahålla autentiseringsuppgifterna direkt till tjänstklienten:
var tenantId = Environment.GetEnvironmentVariable("AZURE_TENANT_ID");
var clientId = Environment.GetEnvironmentVariable("AZURE_CLIENT_ID");
var clientSecret = Environment.GetEnvironmentVariable("AZURE_CLIENT_SECRET");
builder.Services.AddSingleton<BlobServiceClient>(_ =>
new BlobServiceClient(
new Uri("https://<account-name>.blob.core.windows.net"),
new ClientSecretCredential(tenantId, clientId, clientSecret)));