Autentisera .NET-appar till Azure-tjänster under lokal utveckling med hjälp av tjänstens huvudnamn

Utvecklare måste felsöka och testa molnappar på sin lokala arbetsstation. När en app körs på en utvecklares arbetsstation under den lokala utvecklingen måste den fortfarande autentiseras mot alla Azure-tjänster som används av appen. Den här artikeln beskriver hur du konfigurerar dedikerade programtjänstobjekt som ska användas under lokal utveckling.

Ett diagram som visar hur en lokal .NET-app använder utvecklarens autentiseringsuppgifter för att ansluta till Azure med hjälp av lokalt installerade utvecklingsverktyg.

Med dedikerade huvudnamn för programtjänsten för lokal utveckling kan du följa principen om lägsta behörighet under apputveckling. Eftersom behörigheter är begränsade till exakt det som behövs för appen under utvecklingen förhindras appkod från att oavsiktligt komma åt en Azure-resurs som är avsedd att användas av en annan app. Detta förhindrar också att buggar inträffar när appen flyttas till produktion eftersom appen var överprivilegierad i utvecklingsmiljön.

Ett huvudnamn för programtjänsten konfigureras för appen när appen är registrerad i Azure. När du registrerar en app för lokal utveckling rekommenderar vi att du:

  • Skapa en separat appregistrering för varje utvecklare som arbetar med appen. Detta skapar separata huvudnamn för programtjänsten som varje utvecklare kan använda under lokal utveckling och undviker behovet av att utvecklare delar autentiseringsuppgifter för ett enda huvudnamn för programtjänsten.
  • Skapa en separat appregistrering per app. Detta omfattar endast appens behörigheter till det som behövs av appen.

Under lokal utveckling anges miljövariabler med programtjänstens huvudnamns identitet. Azure Identity-biblioteket läser dessa miljövariabler och använder den här informationen för att autentisera appen till de Azure-resurser den behöver.

1 – Registrera programmet i Azure

Huvudobjekt för programtjänsten skapas med en appregistrering i Azure. Detta kan göras med antingen Azure-portalen eller Azure CLI.

Logga in på Azure-portalen och följ dessa steg.

Instruktioner Skärmbild
I Azure-portalen:
  1. Ange appregistreringar i sökfältet överst i Azure-portalen.
  2. Välj objektet med etiketten Appregistreringar under rubriken Tjänster på menyn som visas under sökfältet.
En skärmbild som visar hur du använder det översta sökfältet i Azure-portalen för att hitta och navigera till sidan Appregistreringar.
På sidan Appregistreringar väljer du + Ny registrering. En skärmbild som visar platsen för knappen Ny registrering på sidan Appregistreringar.
På sidan Registrera ett program fyller du i formuläret på följande sätt.
  1. Namn → Ange ett namn för appregistreringen i Azure. Vi rekommenderar att det här namnet inkluderar appnamnet, den användare som appregistreringen är för och en identifierare som "dev" för att indikera att den här appregistreringen ska användas i lokal utveckling.
  2. Kontotyper som stöds → endast konton i den här organisationskatalogen.
Välj Registrera för att registrera din app och skapa programtjänstens huvudnamn.
En skärmbild som visar hur du fyller i sidan Registrera ett program genom att ge appen ett namn och ange kontotyper som stöds som endast konton i den här organisationskatalogen.
På sidan Appregistrering för din app:
  1. Program-ID → Det här är det app-ID som appen använder för att komma åt Azure under den lokala utvecklingen. Kopiera det här värdet till en tillfällig plats i en textredigerare, eftersom du behöver det i ett framtida steg.
  2. Katalog-ID → Det här värdet behövs också av din app när den autentiseras till Azure. Kopiera det här värdet till en tillfällig plats i en textredigerare, eftersom det också behövs i ett framtida steg.
  3. Klientautentiseringsuppgifter → Du måste ange klientautentiseringsuppgifterna för appen innan appen kan autentisera till Azure och använda Azure-tjänster. Välj Lägg till ett certifikat eller en hemlighet för att lägga till autentiseringsuppgifter för din app.
En skärmbild av sidan Appregistrering när appregistreringen har slutförts. Den här skärmbilden visar platsen för program-ID:t och klientorganisations-ID:t, vilket kommer att behövas i ett framtida steg. Den visar också platsen för länken som ska användas för att lägga till en programhemlighet för appen.
På sidan Certifikat och hemligheter väljer du + Ny klienthemlighet. En skärmbild som visar platsen för länken som ska användas för att skapa en ny klienthemlighet på sidan certifikat och hemligheter.
Dialogrutan Lägg till en klienthemlighet visas till höger på sidan. I den här dialogrutan:
  1. Beskrivning → Ange värdet Aktuell.
  2. Upphör → Välj ett värde på 24 månader.
Välj Lägg till för att lägga till hemligheten.
En skärmbild som visar sidan där en ny klienthemlighet läggs till för programtjänstens huvudnamn som skapas av appregistreringsprocessen.
På sidan Certifikat och hemligheter visas värdet för klienthemligheten.

Kopiera det här värdet till en tillfällig plats i en textredigerare, eftersom du behöver det i ett framtida steg.

VIKTIGT! Det här är den enda gången du ser det här värdet. När du lämnar eller uppdaterar den här sidan kan du inte se det här värdet igen. Du kan lägga till ytterligare en klienthemlighet utan att ogiltigförklara den här klienthemligheten, men det här värdet visas inte igen.
En skärmbild som visar sidan med den genererade klienthemligheten.

2 – Skapa Microsoft Entra-grupp för lokal utveckling

Eftersom det vanligtvis finns flera utvecklare som arbetar med en app rekommenderar vi att du skapar en Microsoft Entra-grupp för att kapsla in de roller (behörigheter) som appen behöver i lokal utveckling i stället för att tilldela rollerna till enskilda objekt för tjänstens huvudnamn. Den här metoden erbjuder följande fördelar:

  • Varje utvecklare är säker på att ha samma roller tilldelade eftersom roller tilldelas på gruppnivå.
  • Om en ny roll behövs för appen behöver den bara läggas till i gruppen för appen.
  • Om en ny utvecklare ansluter till teamet skapas ett nytt huvudnamn för programtjänsten för utvecklaren och läggs till i gruppen, vilket säkerställer att utvecklaren har rätt behörighet att arbeta med appen.
Instruktioner Skärmbild
Gå till sidan Microsoft Entra-ID i Azure-portalen genom att skriva Microsoft Entra-ID i sökrutan överst på sidan. Välj Microsoft Entra-ID under avsnittet Tjänster . En skärmbild som visar hur du använder det översta sökfältet i Azure-portalen för att söka efter och navigera till sidan Microsoft Entra-ID.
På sidan Microsoft Entra-ID väljer du Grupper på den vänstra menyn. En skärmbild som visar platsen för menyalternativet Grupper i den vänstra menyn på sidan Standardkatalog för Microsoft Entra.
På sidan Alla grupper väljer du Ny grupp. En skärmbild som visar platsen för knappen Ny grupp på sidan Alla grupper.
På sidan Ny grupp :
  1. GrupptypSäkerhet
  2. Gruppnamn → Ett namn för säkerhetsgruppen, som vanligtvis skapas från programnamnet. Det är också bra att inkludera en sträng som local-dev i namnet på gruppen för att ange syftet med gruppen.
  3. Gruppbeskrivning → En beskrivning av syftet med gruppen.
  4. Välj länken Inga medlemmar har valts under Medlemmar för att lägga till medlemmar i gruppen.
En skärmbild som visar hur du fyller i formuläret för att skapa en ny Microsoft Entra-grupp för programmet. Den här skärmbilden visar också platsen för länken som ska väljas för att lägga till medlemmar i den här gruppen.
I dialogrutan Lägg till medlemmar:
  1. Använd sökrutan för att filtrera listan med huvudnamn i listan.
  2. Välj programtjänstens huvudnamn för lokal utveckling för den här appen. När objekt markeras blir de nedtonade och flyttas till listan Markerade objekt längst ned i dialogrutan.
  3. När du är klar väljer du knappen Välj .
En skärmbild av dialogrutan Lägg till medlemmar som visar hur du väljer huvudnamn för programtjänsten som ska ingå i gruppen.
På sidan Ny grupp väljer du Skapa för att skapa gruppen.

Gruppen skapas och du kommer tillbaka till sidan Alla grupper . Det kan ta upp till 30 sekunder innan gruppen visas. Du kan behöva uppdatera sidan på grund av cachelagring i Azure-portalen.
En skärmbild av sidan Ny grupp som visar hur du slutför processen genom att välja knappen Skapa.

3 – Tilldela roller till programmet

Bestäm sedan vilka roller (behörigheter) din app behöver på vilka resurser och tilldela dessa roller till din app. I det här exemplet tilldelas rollerna till den Microsoft Entra-grupp som skapades i steg 2. Grupper kan tilldelas en roll i ett resurs-, resursgrupps- eller prenumerationsomfång. 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.

Instruktioner Skärmbild
Leta upp resursgruppen för din app genom att söka efter resursgruppens namn med hjälp av sökrutan överst i Azure-portalen. Gå till resursgruppen genom att välja resursgruppens namn under rubriken Resursgrupper i dialogrutan. En skärmbild som visar hur du använder den översta sökrutan i Azure-portalen för att hitta och navigera till den resursgrupp som du vill tilldela roller (behörigheter) till.
På sidan för resursgruppen väljer du Åtkomstkontroll (IAM) på den vänstra menyn. En skärmbild av resursgruppssidan som visar platsen för menyalternativet Åtkomstkontroll (IAM).
På sidan Åtkomstkontroll (IAM):
  1. Välj fliken Rolltilldelningar.
  2. Välj + Lägg till på den översta menyn och sedan Lägg till rolltilldelning från den resulterande nedrullningsbara menyn.
En skärmbild som visar hur du navigerar till fliken rolltilldelningar och platsen för knappen som används för att lägga till rolltilldelningar i en resursgrupp.
sidan Lägg till rolltilldelning visas alla roller som kan tilldelas för resursgruppen.
  1. Använd sökrutan för att filtrera listan till en mer hanterbar storlek. Det här exemplet visar hur du filtrerar efter Storage Blob-roller.
  2. Välj den roll du vill tilldela.
Välj Nästa för att gå till nästa skärm.
En skärmbild som visar hur du filtrerar och väljer rolltilldelningar som ska läggas till i resursgruppen.
På nästa sida För att lägga till rolltilldelning kan du ange vilken användare som ska tilldela rollen till.
  1. Välj Användare, grupp eller tjänstens huvudnamn under Tilldela åtkomst till.
  2. Välj + Välj medlemmar under Medlemmar.
En dialogruta öppnas till höger i Azure-portalen.
En skärmbild som visar alternativknappen för att välja för att tilldela en roll till en Microsoft Entra-grupp och länken som används för att välja den grupp som rollen ska tilldelas till.
I dialogrutan Välj medlemmar:
  1. Textrutan Välj kan användas för att filtrera listan över användare och grupper i din prenumeration. Om det behövs skriver du de första tecknen i microsoft entra-gruppen för lokal utveckling som du skapade för appen.
  2. Välj den microsoft entra-grupp för lokal utveckling som är associerad med ditt program.
Välj Välj längst ned i dialogrutan för att fortsätta.
En skärmbild som visar hur du filtrerar efter och väljer Microsoft Entra-gruppen för appen i dialogrutan Välj medlemmar.
Microsoft Entra-gruppen visas som markerad på skärmen Lägg till rolltilldelning . Välj Granska + tilldela för att gå till den sista sidan och sedan Granska + tilldela igen för att slutföra processen. En skärmbild som visar sidan Lägg till rolltilldelning och platsen för knappen Granska + tilldela som används för att slutföra processen.

4 – Ange miljövariabler för program

Vid körning DefaultAzureCredential söker du efter informationen om tjänstens huvudnamn i en samling miljövariabler. 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.

När du arbetar lokalt med Visual Studio kan miljövariabler anges i launchsettings.json filen i Properties mappen för projektet. När appen startas hämtas dessa värden automatiskt. Tänk på att dessa konfigurationer inte överförs med din app när den distribueras, 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": "00000000-0000-0000-0000-000000000000",
        "AZURE_TENANT_ID":"11111111-1111-1111-1111-111111111111",
        "AZURE_CLIENT_SECRET": "=abcdefghijklmnopqrstuvwxyz"
      }
    },
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development",
        "AZURE_CLIENT_ID": "00000000-0000-0000-0000-000000000000",
        "AZURE_TENANT_ID": "11111111-1111-1111-1111-111111111111",
        "AZURE_CLIENT_SECRET": "=abcdefghijklmnopqrstuvwxyz"
      }
    }
  }

5 – 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 DefaultAzureCredentiallä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.csutför du följande steg för att registrera en klientklass och DefaultAzureCredential:

  1. Azure.Identity Inkludera namnrymderna och Microsoft.Extensions.Azure via using direktiv.
  2. Registrera Azure-tjänstklienten med hjälp av motsvarande Add-prefixed extension-metod.
  3. Skicka en instans av DefaultAzureCredential till UseCredential -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.