Ověřování prostředků Azure z aplikací .NET hostovaných místně

Aplikace hostované mimo Azure (například místně nebo v datacentru třetí strany) by měly při přístupu k prostředkům Azure používat instanční objekt aplikace k ověřování v Azure. Objekty instančního objektu aplikace se vytvářejí pomocí procesu registrace aplikace v Azure. Po vytvoření instančního objektu aplikace se pro vaši aplikaci vygeneruje ID klienta a tajný klíč klienta. ID klienta, tajný klíč klienta a ID vašeho tenanta se pak ukládají do proměnných prostředí, aby je sada Azure SDK pro .NET použila k ověření vaší aplikace v Azure za běhu.

Pro každé prostředí, ve které je aplikace hostovaná, by se měla vytvořit jiná registrace aplikace. To umožňuje nakonfigurovat pro každý instanční objekt specifická oprávnění prostředí a zajistit, aby aplikace nasazená do jednoho prostředí nemluvila s prostředky Azure, které jsou součástí jiného prostředí.

1. Registrace aplikace v Azure

Aplikaci je možné zaregistrovat v Azure pomocí webu Azure Portal nebo Azure CLI.

Přihlaste se k webu Azure Portal a postupujte podle těchto kroků.

Pokyny Snímek obrazovky
Na webu Azure Portal:
  1. Na panelu hledání v horní části webu Azure Portal zadejte registrace aplikací.
  2. Vyberte položku označenou Registrace aplikací pod nadpisem Služby v nabídce, která se zobrazí pod panelem hledání.
A screenshot showing how to use the top search bar in the Azure portal to find and navigate to the App registrations page.
Na stránce Registrace aplikací vyberte + Nová registrace. A screenshot showing the location of the New registration button in the App registrations page.
Na stránce Zaregistrovat aplikaci vyplňte formulář následujícím způsobem.
  1. Název → Zadejte název registrace aplikace v Azure. Tento název se doporučuje zahrnout název aplikace a prostředí (test, prod), pro které je registrace aplikace určená.
  2. Podporované typy účtů → Účty pouze v tomto organizačním adresáři.
Vyberte Zaregistrovat a zaregistrujte aplikaci a vytvořte instanční objekt aplikace.
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.
Na stránce Registrace aplikace pro vaši aplikaci:
  1. ID aplikace (klienta) → Toto je ID aplikace, které bude aplikace používat pro přístup k Azure během místního vývoje. Zkopírujte tuto hodnotu do dočasného umístění v textovém editoru, protože ji budete potřebovat v dalším kroku.
  2. ID adresáře (tenanta) → Tuto hodnotu bude vaše aplikace potřebovat také při ověřování v Azure. Zkopírujte tuto hodnotu do dočasného umístění v textovém editoru, bude ji také potřeba v dalším kroku.
  3. Přihlašovací údaje klienta → Před ověřením aplikace v Azure a používáním služeb Azure musíte pro aplikaci nastavit přihlašovací údaje klienta. Vyberte Přidat certifikát nebo tajný klíč a přidejte přihlašovací údaje pro vaši aplikaci.
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.
Na stránce Certifikáty a tajné kódy vyberte + Nový tajný klíč klienta. A screenshot showing the location of the link to use to create a new client secret on the certificates and secrets page.
Dialogové okno Pro přidání tajného klíče klienta se zobrazí na pravé straně stránky. V tomto dialogovém okně:
  1. Popis → Zadejte hodnotu Current.
  2. Vyprší → Vyberte hodnotu 24 měsíců.
Chcete-li přidat tajný kód, vyberte Přidat .

DŮLEŽITÉ: Nastavte připomenutí v kalendáři před datem vypršení platnosti tajného kódu. Tímto způsobem můžete před vypršením platnosti tohoto tajného kódu přidat nový tajný kód a aktualizovat aplikace a vyhnout se přerušení služby ve vaší aplikaci.
A screenshot showing the page where a new client secret is added for the application service principal created by the app registration process.
Na stránce Certifikáty a tajné kódy se zobrazí hodnota tajného klíče klienta.

Zkopírujte tuto hodnotu do dočasného umístění v textovém editoru, protože ji budete potřebovat v dalším kroku.

DŮLEŽITÉ: Toto je jediný čas, kdy uvidíte tuto hodnotu. Po opuštění nebo aktualizaci této stránky už tuto hodnotu neuvidíte. Můžete přidat další tajný klíč klienta bez zneplatnění tohoto tajného klíče klienta, ale tuto hodnotu znovu neuvidíte.
A screenshot showing the page with the generated client secret.

2. Přiřazení rolí k instančnímu objektu aplikace

Dále musíte určit, jaké role (oprávnění) vaše aplikace potřebuje k jakým prostředkům, a přiřadit tyto role k aplikaci. Role je možné přiřadit roli v oboru prostředku, skupiny prostředků nebo předplatného. Tento příklad ukazuje, jak přiřadit role instančního objektu v oboru skupiny prostředků, protože většina aplikací seskupuje všechny prostředky Azure do jedné skupiny prostředků.

Pokyny Snímek obrazovky
Vyhledejte skupinu prostředků pro vaši aplikaci vyhledáním názvu skupiny prostředků pomocí vyhledávacího pole v horní části webu Azure Portal.

Přejděte do skupiny prostředků tak, že v dialogovém okně vyberete název skupiny prostředků pod nadpisem Skupiny prostředků.
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.
Na stránce skupiny prostředků v nabídce vlevo vyberte Řízení přístupu (IAM ). A screenshot of the resource group page showing the location of the Access control (IAM) menu item.
Na stránce Řízení přístupu (IAM):
  1. Vyberte kartu Přiřazení rolí.
  2. V horní nabídce vyberte + Přidat a potom přidejte přiřazení role z výsledné rozevírací nabídky.
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.
Na stránce Přidat přiřazení role jsou uvedeny všechny role, které je možné přiřadit skupině prostředků.
  1. Pomocí vyhledávacího pole vyfiltrujte seznam na lépe spravovatelnou velikost. Tento příklad ukazuje, jak filtrovat role objektů blob služby Storage.
  2. Vyberte roli, kterou chcete přiřadit.
Výběrem možnosti Další přejdete na další obrazovku.
A screenshot showing how to filter and select role assignments to be added to the resource group.
Další stránka Přidat přiřazení role umožňuje určit, k jakému uživateli se má role přiřadit.
  1. V části Přiřadit přístup vyberte Uživatele, skupinu nebo instanční objekt.
  2. Vyberte a vyberte členy v části Členové.
Na pravé straně webu Azure Portal se otevře dialogové okno.
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.
V dialogovém okně Vybrat členy :
  1. Textové pole Vybrat lze použít k filtrování seznamu uživatelů a skupin ve vašem předplatném. V případě potřeby zadejte několik prvních znaků instančního objektu, který jste vytvořili pro aplikaci pro filtrování seznamu.
  2. Vyberte instanční objekt přidružený k vaší aplikaci.
Pokračujte výběrem možnosti Vybrat v dolní části dialogového okna.
A screenshot showing how to filter for and select the Azure AD group for the application in the Select members dialog box.
Instanční objekt se teď zobrazí jako vybraný na obrazovce Přidat přiřazení role.

Výběrem možnosti Zkontrolovat a přiřadit přejděte na poslední stránku a pak proces dokončete opětovnou kontrolou a přiřazením .
A screenshot showing the completed Add role assignment page and the location of the Review + assign button used to complete the process.

3. Konfigurace proměnných prostředí pro aplikaci

Objekt DefaultAzureCredential vyhledá přihlašovací údaje instančního objektu v sadě proměnných prostředí za běhu. Při práci s .NET existují různé způsoby konfigurace proměnných prostředí v závislosti na nástrojích a prostředí.

Bez ohledu na to, který přístup zvolíte, budete při práci s instančním objektem muset nakonfigurovat následující proměnné prostředí.

  • AZURE_CLIENT_ID → hodnota ID aplikace.
  • AZURE_TENANT_ID → hodnota ID tenanta.
  • AZURE_CLIENT_SECRET → heslo nebo přihlašovací údaje vygenerované pro aplikaci.

Pokud je vaše aplikace hostovaná ve službě IIS, doporučujeme nastavit proměnné prostředí pro každý fond aplikací a izolovat nastavení mezi aplikacemi.

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

Tato nastavení můžete také nakonfigurovat přímo pomocí elementu applicationPoolsapplicationHost.config uvnitř souboru.

<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. Implementace defaultAzureCredential v aplikaci

DefaultAzureCredential podporuje více metod ověřování a určuje metodu ověřování, která se používá za běhu. Aplikace tak může používat různé metody ověřování v různých prostředích bez implementace kódu specifického pro prostředí.

Pořadí a umístění, ve kterých DefaultAzureCredential se hledají přihlašovací údaje, najdete na adrese DefaultAzureCredential.

Pokud chcete implementovat DefaultAzureCredential, nejprve přidejte Azure.Identity balíčky do aplikace a volitelně je Microsoft.Extensions.Azure přidejte. Můžete to provést pomocí příkazového řádku nebo Správce balíčků NuGet.

Otevřete prostředí terminálu podle svého výběru v adresáři projektu aplikace a zadejte následující příkaz.

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

Ke službám Azure se obecně přistupuje pomocí odpovídajících klientských tříd ze sady SDK. Tyto třídy a vlastní služby by se měly v Program.cs souboru zaregistrovat, aby k nim bylo možné přistupovat prostřednictvím injektáže závislostí v celé aplikaci. Program.csUvnitř , postupujte podle následujících kroků k správnému nastavení služby a DefaultAzureCredential.

  1. Zahrňte do příkazu using obory Azure.Identity názvů a Microsoft.Extensions.Azure obory názvů.
  2. Zaregistrujte službu Azure pomocí příslušných pomocných metod.
  3. Předejte instanci DefaultAzureCredential objektu metodě UseCredential .

Příklad je znázorněn v následujícím segmentu kódu.

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

Alternativně můžete ve svých službách využívat DefaultAzureCredential více přímo bez pomoci dalších metod registrace Azure, jak je znázorněno níže.

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

Když se výše uvedený kód spustí na místní pracovní stanici během místního vývoje, podívá se do proměnných prostředí pro instanční objekt aplikace nebo v sadě Visual Studio, VS Code, Azure CLI nebo Azure PowerShellu pro sadu přihlašovacích údajů pro vývojáře, z nichž je možné použít k ověření aplikace v prostředcích Azure během místního vývoje.

Když se do Azure nasadí stejný kód, můžete také ověřit aplikaci v jiných prostředcích Azure. DefaultAzureCredential může načíst nastavení prostředí a konfigurace spravovaných identit pro automatické ověřování v jiných službách.