Ověřování aplikací .NET ve službách Azure pomocí sady .NET Azure SDK

Pokud aplikace potřebuje přístup k prostředku Azure, jako je úložiště, trezor klíčů nebo kognitivní služby, musí se aplikace ověřit v Azure. To platí pro všechny aplikace, ať už nasazené v Azure, nasazené místně nebo ve vývoji na místní vývojářské pracovní stanici. Tento článek popisuje doporučené přístupy k ověřování aplikace v Azure při použití sady Azure SDK pro .NET.

Doporučuje se, aby aplikace při ověřování prostředků Azure používaly ověřování založené na tokenech místo připojovací řetězec. Sada Azure SDK pro .NET poskytuje třídy, které podporují ověřování na základě tokenů a umožňují aplikacím bezproblémově ověřovat prostředky Azure bez ohledu na to, jestli je aplikace v místním vývoji, nasazená v Azure nebo nasazená na místním serveru.

Konkrétní typ ověřování založeného na tokenech by aplikace měla použít k ověření prostředků Azure, závisí na tom, kde se aplikace spouští, a je znázorněna v následujícím diagramu.

Diagram znázorňující doporučené strategie ověřování na základě tokenů pro aplikaci v závislosti na tom, kde je spuštěná

  • Když vývojář spouští aplikaci během místního vývoje– Aplikace se může ověřit v Azure pomocí instančního objektu aplikace pro místní vývoj nebo pomocí přihlašovacích údajů Azure vývojáře. Každá z těchto možností je podrobněji popsána v části ověřování během místního vývoje.
  • Když je aplikace hostovaná v Azure– Aplikace by se měla ověřovat u prostředků Azure pomocí spravované identity. Tato možnost je podrobněji popsána níže v části Ověřování v serverových prostředích.
  • Když je aplikace hostovaná a nasazená místně – aplikace by se měla ověřit u prostředků Azure pomocí instančního objektu aplikace. Tato možnost je podrobněji popsána níže v části Ověřování v serverových prostředích.

DefaultAzureCredential

Třída DefaultAzureCredential poskytovaná sadou Azure SDK umožňuje aplikacím používat různé metody ověřování v závislosti na prostředí, ve kterém se spouští. To umožňuje zvýšit úroveň aplikací z místního vývoje na testovací prostředí do produkčního prostředí beze změn kódu. Nakonfigurujete odpovídající metodu ověřování pro každé prostředí a DefaultAzureCredential automaticky zjistíte a použijete tuto metodu ověřování. Použití DefaultAzureCredential by mělo být upřednostňované před ručním kódováním příznaků podmíněné logiky nebo funkcí, aby se používaly různé metody ověřování v různých prostředích.

Podrobnosti o používání DefaultAzureCredential třídy jsou popsány dále v tomto článku v části Použití DefaultAzureCredential v aplikaci.

Výhody ověřování založeného na tokenech

Při vytváření aplikací pro Azure důrazně doporučujeme používat připojovací řetězec ověřování na základě tokenů. Ověřování na základě tokenů nabízí následující výhody oproti ověřování pomocí připojovací řetězec.

  • Níže popsané metody ověřování na základě tokenů umožňují vytvořit konkrétní oprávnění potřebná aplikací v prostředku Azure. To se řídí principem nejnižších oprávnění. Naproti tomu připojovací řetězec uděluje úplná práva k prostředku Azure.
  • Zatímco kdokoli nebo jakákoli aplikace s připojovací řetězec se mohou připojit k prostředku Azure, metody ověřování založené na tokenech mají přístup k prostředku pouze aplikacím určeným pro přístup k prostředku.
  • V případě spravované identity neexistuje žádný tajný kód aplikace, který se má uložit. Díky tomu je aplikace bezpečnější, protože neexistuje žádný připojovací řetězec nebo tajný kód aplikace, než je možné ohrozit.
  • Balíček Azure.Identity v sadě Azure SDK spravuje tokeny za vás na pozadí. Díky tomu se ověřování na základě tokenů snadno používá jako připojovací řetězec.

Použití připojovací řetězec by mělo být omezené na počáteční testování konceptů aplikací nebo prototypů vývoje, které nepřistupují k produkčním nebo citlivým datům. Jinak by se při ověřování prostředků Azure měly vždy upřednostňovat třídy ověřování založené na tokenech, které jsou dostupné v sadě Azure SDK.

Ověřování v serverových prostředích

Při hostování v serverovém prostředí by měla být každé aplikaci přiřazena jedinečná identita aplikace pro každé prostředí, ve které je aplikace spuštěná. V Azure je identita aplikace reprezentována instančním objektem, speciálním typem objektu zabezpečení určeným k identifikaci a ověřování aplikací v Azure. Typ instančního objektu, který se má použít pro vaši aplikaci, závisí na tom, kde je vaše aplikace spuštěná.

Metoda ověřování Popis
Aplikace hostované v Azure Aplikace hostované v Azure by měly používat instanční objekt spravované identity. Spravované identity jsou navržené tak, aby představovaly identitu aplikace hostované v Azure a dají se používat jenom s aplikacemi hostovanými v Azure.

Například webová aplikace .NET hostovaná ve službě Aplikace Azure by byla přiřazena spravovaná identita. Spravovaná identita přiřazená k aplikaci by se pak použila k ověření aplikace v jiných službách Azure.

Aplikace hostované mimo Azure
(například místní aplikace)
Aplikace hostované mimo Azure (například místní aplikace), které se potřebují připojit ke službám Azure, by měly používat instanční objekt aplikace. Instanční objekt aplikace představuje identitu aplikace v Azure a vytvoří se prostřednictvím procesu registrace aplikace.

Představte si například webovou aplikaci .NET hostované místně, která využívá službu Azure Blob Storage. Pomocí procesu registrace aplikace byste pro aplikaci vytvořili instanční objekt aplikace. AZURE_TENANT_IDAZURE_CLIENT_SECRET A AZURE_CLIENT_IDvšechny by byly uloženy jako proměnné prostředí, které musí aplikace číst za běhu a umožnit aplikaci ověřit v Azure pomocí instančního objektu aplikace.

Ověřování během místního vývoje

Když je aplikace spuštěná na pracovní stanici vývojáře během místního vývoje, musí se stále ověřovat u všech služeb Azure, které aplikace používá. Mezi dvě hlavní strategie ověřování aplikací v Azure během místního vývoje patří:

Metoda ověřování Popis
Vytvoření objektů instančního objektu vyhrazené aplikace, které se mají použít při místním vývoji V této metodě se objekty instančního objektu vyhrazené aplikace nastaví pomocí procesu registrace aplikace pro použití při místním vývoji. Identita instančního objektu se pak uloží jako proměnné prostředí, ke které má aplikace přistupovat, když se spustí v místním vývoji.

Tato metoda umožňuje přiřadit konkrétní oprávnění k prostředkům potřebným aplikací k objektům instančního objektu, které používají vývojáři během místního vývoje. Tím zajistíte, že aplikace má přístup jenom ke konkrétním prostředkům, které potřebuje, a replikuje oprávnění, která bude aplikace mít v produkčním prostředí.

Nevýhodou tohoto přístupu je potřeba vytvořit samostatné objekty instančního objektu pro každého vývojáře, který pracuje v aplikaci.

Ověření aplikace v Azure pomocí přihlašovacích údajů vývojáře během místního vývoje V této metodě musí být vývojář přihlášený k Azure ze sady Visual Studio, rozšíření Azure Tools pro VS Code, Azure CLI nebo Azure PowerShellu na místní pracovní stanici. Aplikace pak může přistupovat k přihlašovacím údajům vývojáře z úložiště přihlašovacích údajů a pomocí těchto přihlašovacích údajů získat přístup k prostředkům Azure z aplikace.

Tato metoda má výhodu jednoduššího nastavení, protože vývojář se musí přihlásit ke svému účtu Azure jenom ze sady Visual Studio, VS Code nebo Azure CLI. Nevýhodou tohoto přístupu je, že účet vývojáře má pravděpodobně více oprávnění, než vyžaduje aplikace. Proto tento přístup přesně nereplikuje oprávnění, se kterými se aplikace bude spouštět v produkčním prostředí.

Použití 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.

Prozkoumání posloupnosti metod ověřování DefaultAzureCredential

Interně DefaultAzureCredential implementuje řetězec zprostředkovatelů přihlašovacích údajů pro ověřování aplikací v prostředcích Azure. Každý zprostředkovatel přihlašovacích údajů dokáže zjistit, jestli jsou pro aplikaci nakonfigurované přihlašovací údaje daného typu. DefaultAzureCredential postupně kontroluje každého zprostředkovatele v daném pořadí a používá přihlašovací údaje od prvního zprostředkovatele, který má nakonfigurované přihlašovací údaje.

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

Typ přihlašovacích údajů Popis
Instanční objekt aplikace DefaultAzureCredential přečte sadu proměnných prostředí, která určí, jestli je pro aplikaci nastavený instanční objekt aplikace (uživatel aplikace). Pokud ano, DefaultAzureCredential použije tyto hodnoty k ověření aplikace v Azure.

Tato metoda se nejčastěji používá v serverových prostředích, ale dá se použít také při místním vývoji.
Spravovaná identita Pokud je aplikace nasazená na hostitele Azure s povolenou spravovanou identitou, DefaultAzureCredential ověří aplikaci v Azure pomocí této spravované identity. Ověřování pomocí spravované identity je popsáno v části Ověřování v serverových prostředích tohoto dokumentu.

Tato metoda je dostupná jenom v případě, že je aplikace hostovaná v Azure pomocí služby, jako je služba Aplikace Azure Service, Azure Functions nebo Azure Virtual Machines.
Visual Studio Pokud se vývojář ověřil v Azure přihlášením do sady Visual Studio, DefaultAzureCredential ověří aplikaci v Azure pomocí stejného účtu.
Visual Studio Code Pokud se vývojář ověřil v Azure pomocí modulu plug-in Azure Account editoru Visual Studio Code, DefaultAzureCredential ověří aplikaci v Azure pomocí stejného účtu.
Azure CLI Pokud se vývojář ověřil v Azure pomocí az login příkazu v Azure CLI, DefaultAzureCredential ověří aplikaci v Azure pomocí stejného účtu.
Azure PowerShell Pokud se vývojář ověřil v Azure pomocí rutiny Connect-AzAccount z Azure PowerShellu, DefaultAzureCredential ověří aplikaci v Azure pomocí stejného účtu.
Interaktivní Pokud je tato možnost povolená, DefaultAzureCredential interaktivně ověří vývojáře pomocí výchozího prohlížeče aktuálního systému. Ve výchozím nastavení je tato možnost zakázaná.