Osvědčené postupy ověřování s využitím knihovny Identit Azure pro .NET
Tento článek nabízí pokyny, které vám pomůžou maximalizovat výkon a spolehlivost aplikací .NET při ověřování ve službách Azure. Pokud chcete využít knihovnu Identit Azure pro .NET na maximum, je důležité porozumět potenciálním problémům a technikám zmírnění rizik.
Použití deterministických přihlašovacích údajů v produkčních prostředích
DefaultAzureCredential
je nejpohodnější způsob, jak začít s knihovnou identit Azure, ale tato pohodlí přináší i určité kompromisy. Zejména konkrétní přihlašovací údaje v řetězci, které budou úspěšné a budou použity pro ověřování žádostí, není možné předem zaručit. V produkčním prostředí může tato nepředvídatelnost představovat významné a někdy drobné problémy.
Představte si například následující hypotetickou posloupnost událostí:
- Bezpečnostní tým organizace vyžaduje, aby všechny aplikace používaly spravovanou identitu k ověřování prostředků Azure.
- Po měsíce aplikace .NET hostovaná na virtuálním počítači Azure úspěšně používá
DefaultAzureCredential
k ověření prostřednictvím spravované identity. - Vývojář na tento virtuální počítač nainstaluje Azure CLI a spustí příkaz
az login
pro ověření v Azure, aniž by řekl týmu podpory. - Kvůli samostatné změně konfigurace v prostředí Azure začne ověřování prostřednictvím původní spravované identity neočekávaně tiše selhávat.
-
DefaultAzureCredential
přeskočí neúspěšnéManagedIdentityCredential
a vyhledá další dostupné přihlašovací údaje, což jeAzureCliCredential
. - Aplikace začne místo spravované identity využívat přihlašovací údaje Azure CLI, což může selhat nebo vést k neočekávanému zvýšení oprávnění nebo snížení oprávnění.
Pokud chcete těmto typům drobných problémů nebo tichých selhání v produkčních aplikacích zabránit, důrazně zvažte přechod z DefaultAzureCredential
na jedno z následujících deterministických řešení:
- Konkrétní
TokenCredential
implementace, napříkladManagedIdentityCredential
. Možnosti najdete v odvozeném seznamu . - Určitá implementace
ChainedTokenCredential
, redukovaná a optimalizovaná pro prostředí Azure, ve kterém vaše aplikace běží.ChainedTokenCredential
v podstatě vytvoří konkrétní seznam povolených přijatelných možností přihlašovacích údajů, napříkladManagedIdentity
pro produkční prostředí aVisualStudioCredential
pro vývoj.
Představte si například následující konfiguraci DefaultAzureCredential
v projektu ASP.NET Core:
builder.Services.AddAzureClients(clientBuilder =>
{
clientBuilder.AddBlobServiceClient(
new Uri("https://<account-name>.blob.core.windows.net"));
DefaultAzureCredential credential = new();
clientBuilder.UseCredential(credential);
});
Nahraďte předchozí kód implementací ChainedTokenCredential
, která určuje pouze nezbytné přihlašovací údaje:
builder.Services.AddAzureClients(clientBuilder =>
{
clientBuilder.AddBlobServiceClient(
new Uri("https://<account-name>.blob.core.windows.net"));
clientBuilder.UseCredential(new ChainedTokenCredential(
new ManagedIdentityCredential(clientId: userAssignedClientId),
new VisualStudioCredential()));
});
V tomto příkladu se ManagedIdentityCredential
automaticky zjistí v produkčním prostředí, zatímco VisualStudioCredential
bude fungovat v místních vývojových prostředích.
Opakované použití instancí autentizačních údajů
Pokud je to možné, použijte instance přihlašovacích údajů, pokud je to možné, abyste zlepšili odolnost aplikací a snížili počet žádostí o přístupový token vydaných pro Microsoft Entra ID. Při opětovném použití přihlašovacích údajů se provede pokus o načtení tokenu z mezipaměti tokenů aplikace spravované základní závislostí MSAL. Další informace najdete v tématu Ukládání tokenů do mezipaměti v klientské knihovně azure Identity.
Důležitý
Aplikace s vysokou zátěží, která znovu nepoužívá přihlašovací údaje, může narazit na omezení odpovědí HTTP 429 od Microsoft Entra ID, což může vést k výpadkům aplikace.
Doporučená strategie opětovného použití přihlašovacích údajů se liší podle typu aplikace .NET.
Implementujte opakované použití přihlašovacích údajů prostřednictvím metody UseCredentialMicrosoft.Extensions.Azure
. Představte si například aplikaci ASP.NET Core hostované ve službě Azure App Service se sadou proměnných prostředí UserAssignedClientId
. Zprostředkovatel konfigurace .NET určuje, že proměnná prostředí existuje, a ManagedIdentityCredential
se použije k ověření tajných kódů služby Key Vault a klientů služby Blob Storage. V opačném případě se použije zřetězená posloupnost přihlašovacích údajů pro vývojové prostředí.
builder.Services.AddAzureClients(clientBuilder =>
{
clientBuilder.AddSecretClient(new Uri("<key-vault-url>"));
clientBuilder.AddBlobServiceClient(new Uri("<blob-storage-url>"));
string? clientId = builder.Configuration["UserAssignedClientId"];
TokenCredential credential = clientId is not null
? new ManagedIdentityCredential(
ManagedIdentityId.FromUserAssignedClientId(clientId))
: new ChainedTokenCredential(
new VisualStudioCredential(),
new AzureCliCredential(),
new AzurePowerShellCredential());
clientBuilder.UseCredential(credential);
});
Informace o tomto přístupu naleznete v tématu Ověřování pomocí Microsoft Entra ID.
Vysvětlení, kdy je potřeba použít životnost tokenu a logiku ukládání do mezipaměti
Pokud používáte přihlašovací údaje knihovny Identit Azure mimo kontext klientské knihovny Azure SDK, která závisí naAzure Core, stane se vaší odpovědností spravovat platnost tokenu a chování při ukládání do mezipaměti ve vaší aplikaci.
Vlastnost RefreshOn v AccessToken
, která uživatelům poskytuje nápovědu o tom, kdy mohou zkusit aktualizovat token, bude automaticky použita klientskými knihovnami sady Azure SDK, které závisejí na knihovně Azure Core k automatické aktualizaci tokenu. Pro přímé použití přihlašovacích údajů knihovny Azure Identity , které podporují ukládání tokenů do mezipaměti, se základní MSAL mezipaměť automaticky proaktivně aktualizuje, když nastane RefreshOn
čas. Tento návrh umožňuje klientskému kódu volat GetToken
pokaždé, když je potřeba token, a delegovat aktualizaci do knihovny.
Aby bylo možné volat GetToken
pouze v případě potřeby, sledujte datum RefreshOn
a proaktivně se po tomto datu pokuste token aktualizovat. Konkrétní implementace je na zákazníkovi.
Pochopte strategii opakování spravované identity
Identitní knihovna Azure pro .NET umožňuje autentizaci prostřednictvím spravované identity pomocí ManagedIdentityCredential
. Způsob použití ManagedIdentityCredential
ovlivňuje použitou strategii opakování. Při použití prostřednictvím:
-
DefaultAzureCredential
, pokud se pokus o získání počátečního tokenu nezdaří nebo vyprší časový limit, neopakují se žádné pokusy o obnovení. Jedná se o nejodolnější možnost, protože je optimalizovaná tak, aby rychle selhala pro efektivní vnitřní smyčku vývoje. - Jakýkoli jiný přístup, například
ChainedTokenCredential
neboManagedIdentityCredential
přímo:Časový interval mezi opakovanými pokusy začíná na 0,8 sekundách a ve výchozím nastavení se pokusí o maximálně pět opakování. Tato možnost je optimalizovaná pro odolnost, ale přináší potenciálně nežádoucí zpoždění ve vnitřní smyčce vývoje.
Chcete-li změnit některé z výchozích nastavení opakování, použijte vlastnost
Retry
vManagedIdentityCredentialOptions
. Zkuste například opakovat maximálně třikrát s počátečním intervalem 0,5 sekund:ManagedIdentityCredentialOptions miCredentialOptions = new( ManagedIdentityId.FromUserAssignedClientId(clientId) ) { Retry = { MaxRetries = 3, Delay = TimeSpan.FromSeconds(0.5), } }; ChainedTokenCredential tokenChain = new( new ManagedIdentityCredential(miCredentialOptions), new VisualStudioCredential() );
Další informace o přizpůsobení zásad opakování najdete v tématu Nastavení vlastní zásady opakování.