Dela via


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 SDK för .NET för att autentisera din app till Azure vid körning.

En annan appregistrering ska skapas för varje miljö som appen finns i. Detta gör att miljöspecifika resursbehörigheter kan 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.

Instruktioner Skärmbild
I Azure-portalen:
  1. Ange appregistreringar i sökfältet överst i Azure-portalen.
  2. Välj det objekt som är märkt Appregistreringar under rubriken Tjänster på menyn som visas under sökfältet.
A screenshot showing how to use the top search bar in the Azure portal to find and navigate to the App registrations page.
På sidan Appregistreringar väljer du + Ny registrering. A screenshot showing the location of the New registration button in the App registrations page.
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. Det rekommenderas att det här namnet inkluderar appnamnet och miljön (test, prod) som appregistreringen är till för.
  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.
A screenshot showing how to fill out the Register an application page by giving the app a name and specifying supported account types as accounts in this organizational directory only.
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. Det behövs också 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.
A screenshot of the App registration page after the app registration has been completed. This screenshot shows the location of the application ID and tenant ID which will be needed in a future step. It also shows the location of the link to use to add an application secret for the app.
På sidan Certifikat och hemligheter väljer du + Ny klienthemlighet. A screenshot showing the location of the link to use to create a new client secret on the certificates and secrets page.
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.

VIKTIGT: Ange en påminnelse i kalendern före hemlighetens förfallodatum. På så sätt kan du lägga till en ny hemlighet före och uppdatera dina appar innan hemligheten upphör att gälla och undvika tjänstavbrott i appen.
A screenshot showing the page where a new client secret is added for the application service principal created by the app registration process.
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 kommer du inte att kunna 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.
A screenshot showing the page with the generated client secret.

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 program grupperar alla sina Azure-resurser i en enda resursgrupp.

Instruktioner Skärmbild
Leta upp resursgruppen för ditt program 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.
A screenshot showing how to use the top search box in the Azure portal to locate and navigate to the resource group you want to assign roles (permissions) to.
På sidan för resursgruppen väljer du Åtkomstkontroll (IAM) på den vänstra menyn. A screenshot of the resource group page showing the location of the Access control (IAM) menu item.
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.
A screenshot showing how to navigate to the role assignments tab and the location of the button used to add role assignments to a resource group.
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.
A screenshot showing how to filter and select role assignments to be added to the resource group.
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.
A screenshot showing the radio button to select to assign a role to an Azure AD group and the link used to select the group to assign the role to.
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 tjänstens huvudnamn som du skapade för appen för att filtrera listan.
  2. Välj tjänstens huvudnamn som är associerat med ditt program.
Välj Välj längst ned i dialogrutan för att fortsätta.
A screenshot showing how to filter for and select the Azure AD group for the application in the Select members dialog box.
Tjänstens huvudnamn visas nu som valt 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.
A screenshot showing the completed Add role assignment page and the location of the Review + assign button used to complete the process.

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 måste du konfigurera 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 program.

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 programmet

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.