Klientská knihovna ověřování aplikací pro .NET – verze 1.6.0
Poznámka
Microsoft.Azure.Services.AppAuthentication je vyřazený z provozu a už se nepodporuje ani neudržuje.
Nahrazuje ji klientská knihovna Azure Identity , která je k dispozici pro .NET, Javu, TypeScript a Python. Informace o tom, jak migrovat do Azure Identity
, najdete tady: Pokyny k migraci z AppAuthentication do Azure.Identity.
K ověřování ve službách Azure pomocí instančního objektu potřebujete přihlašovací údaje Azure Active Directory (Azure AD), a to buď sdílený tajný klíč, nebo certifikát.
Správa takových přihlašovacích údajů může být obtížná. Je lákavé sdružovat přihlašovací údaje do aplikace tím, že je zahrnete do zdrojových nebo konfiguračních souborů. Knihovna Microsoft.Azure.Services.AppAuthentication
for .NET tento problém zjednodušuje. Používá přihlašovací údaje vývojáře k ověřování během místního vývoje. Po pozdějším nasazení řešení do Azure se knihovna automaticky přepne na přihlašovací údaje aplikace. Používání přihlašovacích údajů vývojáře během místního vývoje je bezpečnější, protože nemusíte vytvářet přihlašovací údaje Azure AD ani sdílet přihlašovací údaje mezi vývojáři.
Knihovna Microsoft.Azure.Services.AppAuthentication
spravuje ověřování automaticky, což vám umožní soustředit se na řešení, a ne na přihlašovací údaje. Podporuje místní vývoj pomocí sady Microsoft Visual Studio, Azure CLI nebo integrovaného ověřování Azure AD. Při nasazení do prostředku Azure, který podporuje spravovanou identitu, knihovna automaticky používá spravované identity pro prostředky Azure. Nejsou vyžadovány žádné změny kódu ani konfigurace. Knihovna také podporuje přímé použití přihlašovacích údajů klienta Azure AD v případě, že spravovaná identita není k dispozici nebo když není možné určit kontext zabezpečení vývojáře během místního vývoje.
Zdrojový kód | Balíček (nuget) | Dokumentace ke službě Azure Active Directory
Požadavky
Rozšíření Ověřování aplikací pro Visual Studio, které je k dispozici jako samostatné rozšíření pro Visual Studio 2017 Update 5 a je součástí produktu v aktualizaci Update 6 a novější. S aktualizací Update 6 nebo novější můžete ověřit instalaci rozšíření Ověřování aplikací tak, že v instalačním programu sady Visual Studio vyberete Vývojové nástroje Azure.
Použití knihovny
U aplikací .NET je nejjednodušším způsobem práce se spravovanou identitou prostřednictvím Microsoft.Azure.Services.AppAuthentication
balíčku. Tady je postup, jak začít:
Vyberte Nástroje> Správce >balíčků NuGetSpravovat balíčky NuGet pro řešení a přidejte odkazy na balíčky NuGet Microsoft.Azure.Services.AppAuthentication a Microsoft.Azure.KeyVault do projektu.
Použití AzureServiceTokenProvider ke zjednodušení žádostí o přístupové tokeny pro klienty Azure, jako v následujících příkladech:
using Microsoft.Azure.Services.AppAuthentication; using Microsoft.Azure.KeyVault; using System.Data.SqlClient // Use AzureServiceTokenProvider’s built-in callback for KeyVaultClient var azureServiceTokenProvider = new AzureServiceTokenProvider(); var kv = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback)); // Request an access token for SqlConnection sqlConnection = new SqlConnection(YourConnectionString)) { sqlConnection.AccessToken = await azureServiceTokenProvider.GetAccessTokenAsync("https://database.windows.net"); sqlConnection.Open(); }
Třída bezpečná AzureServiceTokenProvider
pro vlákna ukládá token do mezipaměti a načítá ho z Azure AD těsně před vypršením platnosti. To znamená, že před voláním metody nikdy nemusíte kontrolovat vypršení platnosti tokenu GetAccessTokenAsync
.
Metoda GetAccessTokenAsync
vyžaduje identifikátor prostředku. Další informace o službách Microsoft Azure najdete v tématu Co jsou spravované identity pro prostředky Azure.
Ověřování místního vývoje
Pro místní vývoj existují dva primární scénáře ověřování: ověřování ve službách Azure a ověřování ve vlastních službách.
Ověřování ve službách Azure
Místní počítače nepodporují spravované identity pro prostředky Azure. V důsledku toho Microsoft.Azure.Services.AppAuthentication
knihovna používá vaše přihlašovací údaje pro vývojáře ke spuštění ve vašem místním vývojovém prostředí. Když se řešení nasadí do Azure, knihovna použije spravovanou identitu k přepnutí na tok udělení přihlašovacích údajů klienta OAuth 2.0. Tento přístup znamená, že stejný kód můžete testovat místně i vzdáleně bez obav.
Pro místní vývoj AzureServiceTokenProvider
načítá tokeny pomocí sady Visual Studio, rozhraní příkazového řádku Azure (CLI) nebo Azure AD integrovaného ověřování. Každá možnost se postupně zkouší a knihovna použije první možnost, která bude úspěšná. Pokud žádná možnost nefunguje, vyvolá se AzureServiceTokenProviderException
výjimka s podrobnými informacemi.
Ověřování pomocí sady Visual Studio
Ověření pomocí sady Visual Studio:
Přihlaste se k sadě Visual Studio a pomocí nástroje>Možnosti otevřete Možnosti.
Vyberte Ověřování služby Azure, zvolte účet pro místní vývoj a vyberte OK.
Pokud při používání sady Visual Studio narazíte na problémy, jako jsou chyby, které zahrnují soubor zprostředkovatele tokenu, pečlivě si projděte předchozí kroky.
Možná budete muset znovu provést ověření tokenu pro vývojáře. Uděláte to tak, že vyberete Možnosti nástrojů> a pak vyberete Ověřování služby Azure. Vyhledejte odkaz Pro opětovné ověření pod vybraným účtem. Vyberte ho a ověřte ho.
Ověřování pomocí Azure CLI
Pokud chcete k místnímu vývoji použít Azure CLI, ujistěte se, že máte verzi Azure CLI verze 2.0.12 nebo novější.
V Azure CLI postupujte takto:
Vyhledejte Azure CLI na hlavním panelu Windows a otevřete příkazový řádek Microsoft Azure.
Přihlaste se k Azure Portal: az login a přihlaste se k Azure.
Ověřte přístup zadáním příkazu az account get-access-token --resource https://vault.azure.net. Pokud se zobrazí chyba, zkontrolujte, jestli je správně nainstalovaná správná verze Azure CLI.
Pokud azure CLI není nainstalované do výchozího adresáře, může se zobrazit zpráva o chybě, která
AzureServiceTokenProvider
nemůže najít cestu pro Azure CLI. K definování instalační složky Azure CLI použijte proměnnou prostředí AzureCLIPath .AzureServiceTokenProvider
V případě potřeby přidá adresář zadaný v proměnné prostředí AzureCLIPath do proměnné prostředí Path .Pokud jste přihlášení k Azure CLI pomocí více účtů nebo váš účet má přístup k více předplatným, musíte zadat předplatné, které se má použít. Zadejte příkaz az account set --subscription .
Tento příkaz vygeneruje výstup pouze při selhání. Pokud chcete ověřit aktuální nastavení účtu, zadejte příkaz az account list
.
Ověřování pomocí ověřování Azure AD
Pokud chcete použít ověřování Azure AD, ověřte, že:
Vaše místní Active Directory se synchronizuje s Azure AD. Další informace najdete v tématu Co je hybridní identita s Azure Active Directory?.
Váš kód běží na počítači připojeném k doméně.
Ověřování ve vlastních službách
Když služba volá služby Azure, předchozí kroky fungují, protože služby Azure umožňují přístup uživatelům i aplikacím.
Při vytváření služby, která volá vlastní službu, použijte přihlašovací údaje klienta Azure AD pro ověřování místního vývoje. Existují dvě možnosti:
Přihlaste se k Azure pomocí instančního objektu:
Vytvořte instanční objekt. Další informace najdete v tématu Vytvoření instančního objektu Azure pomocí Azure CLI.
Pomocí Azure CLI se přihlaste pomocí následujícího příkazu:
az login --service-principal -u <principal-id> --password <password> --tenant <tenant-id> --allow-no-subscriptions
Vzhledem k tomu, že instanční objekt nemusí mít přístup k předplatnému, použijte
--allow-no-subscriptions
argument .
K zadání podrobností instančního objektu použijte proměnné prostředí. Další informace najdete v tématu Spuštění aplikace pomocí instančního objektu.
Po přihlášení k Azure AzureServiceTokenProvider
použije instanční objekt k načtení tokenu pro místní vývoj.
Tento přístup se vztahuje pouze na místní rozvoj. Po nasazení řešení do Azure se knihovna přepne na spravovanou identitu pro účely ověřování.
Spuštění aplikace pomocí spravované identity nebo identity přiřazené uživatelem
Když spustíte kód na Azure App Service nebo virtuálním počítači Azure s povolenou spravovanou identitou, knihovna automaticky použije spravovanou identitu. Nejsou vyžadovány žádné změny kódu, ale spravovaná identita musí mít oprávnění pro prostředky, ke kterým se pokusí získat přístup. Například zásady přístupu se vyžadují, aby spravovaná identita přistupovala k tajným kódům v trezoru klíčů.
Případně se můžete ověřit pomocí identity přiřazené uživatelem. Další informace o identitách přiřazených uživatelem najdete v tématu o spravovaných identitách pro prostředky Azure. Pokud chcete ověřit identitu přiřazenou uživatelem, musíte v připojovacím řetězci zadat ID klienta identity přiřazené uživatelem. Připojovací řetězec je zadaný v části Podpora připojovacího řetězce.
Spuštění aplikace pomocí instančního objektu
Pro ověření může být nutné vytvořit přihlašovací údaje klienta Azure AD. K této situaci může dojít v následujících příkladech:
Váš kód běží v místním vývojovém prostředí, ale ne pod identitou vývojáře. Service Fabric například používá účet NetworkService pro místní vývoj.
Váš kód běží v místním vývojovém prostředí a vy se ověřujete ve vlastní službě, takže nemůžete použít svoji vývojářskou identitu.
Váš kód běží na výpočetním prostředku Azure, který zatím nepodporuje spravované identity pro prostředky Azure, jako je Azure Batch.
Existují tři primární metody použití instančního objektu ke spuštění aplikace. Pokud chcete některou z nich použít, musíte nejprve vytvořit instanční objekt. Další informace najdete v tématu Vytvoření instančního objektu Azure pomocí Azure CLI.
Použití certifikátu v místním úložišti klíčů k přihlášení k Azure AD
Vytvořte certifikát instančního objektu pomocí příkazu Azure CLI az ad sp create-for-rbac .
az ad sp create-for-rbac --create-cert
Tento příkaz vytvoří soubor .pem (privátní klíč), který je uložený ve vašem domovském adresáři. Pomocí příkazu převeďte soubor .pem na certifikát PFX:
openssl pkcs12 -export -in test.pem -out test.pfx
Proměnnou prostředí s názvem AzureServicesAuthConnectionString nastavte na následující hodnotu:
RunAs=App;AppId={AppId};TenantId={TenantId};CertificateThumbprint={Thumbprint}; CertificateStoreLocation={CertificateStore}
Nahraďte {AppId}, {TenantId} a {Thumbprint} hodnotami vygenerovanými v kroku 1. Nahraďte {CertificateStore} hodnotou LocalMachine' nebo CurrentUser na základě vašeho plánu nasazení.
Spusťte aplikaci.
Použití přihlašovacích údajů sdíleného tajného klíče k přihlášení k Azure AD
Pomocí příkazu Azure CLI az ad sp create-for-rbac s parametrem --sdk-auth vytvořte certifikát instančního objektu s heslem.
az ad sp create-for-rbac --sdk-auth
Proměnnou prostředí s názvem AzureServicesAuthConnectionString nastavte na následující hodnotu:
RunAs=App;AppId={AppId};TenantId={TenantId};AppKey={ClientSecret}
Nahraďte {AppId}, {TenantId} a {ClientSecret} hodnotami vygenerovanými v kroku 1.
Spusťte aplikaci.
Jakmile je vše správně nastavené, nebudou potřeba žádné další změny kódu. AzureServiceTokenProvider
používá proměnnou prostředí a certifikát k ověření pro Azure AD.
Přihlášení k Azure AD pomocí certifikátu v Key Vault
Tato možnost umožňuje uložit klientský certifikát instančního objektu v Key Vault a použít ho k ověřování instančního objektu. Tuto možnost můžete použít v následujících scénářích:
Místní ověřování, kde chcete ověřit pomocí explicitního instančního objektu a chcete bezpečně uchovávat přihlašovací údaje instančního objektu v trezoru klíčů. Vývojářský účet musí mít přístup k trezoru klíčů.
Ověřování z Azure, kde chcete použít explicitní přihlašovací údaje a chcete bezpečně uchovávat přihlašovací údaje instančního objektu v trezoru klíčů. Tuto možnost můžete použít pro scénář mezi tenanty. Spravovaná identita musí mít přístup k trezoru klíčů.
Spravovaná identita nebo identita vývojáře musí mít oprávnění k načtení klientského certifikátu z Key Vault. Knihovna AppAuthentication používá načtený certifikát jako přihlašovací údaje klienta instančního objektu.
Použití klientského certifikátu pro ověřování instančního objektu:
Vytvořte certifikát instančního objektu a automaticky ho uložte do Key Vault. Použijte příkaz Azure CLI az ad sp create-for-rbac --keyvault <keyvaultname> --cert <certificatename> --create-cert --skip-assignment :
az ad sp create-for-rbac --keyvault <keyvaultname> --cert <certificatename> --create-cert --skip-assignment
Identifikátor certifikátu bude adresa URL ve formátu.
https://<keyvaultname>.vault.azure.net/secrets/<certificatename>
Nahraďte
{KeyVaultCertificateSecretIdentifier}
v tomto připojovacím řetězci identifikátorem certifikátu:RunAs=App;AppId={TestAppId};KeyVaultCertificateSecretIdentifier={KeyVaultCertificateSecretIdentifier}
Pokud se například váš trezor klíčů jmenoval myKeyVault a vytvořili jste certifikát myCert, identifikátor certifikátu bude:
RunAs=App;AppId={TestAppId};KeyVaultCertificateSecretIdentifier=https://myKeyVault.vault.azure.net/secrets/myCert
Podpora připojovacích řetězců
Ve výchozím nastavení AzureServiceTokenProvider
se pokusí načíst token pomocí následujících metod ověřování:
- Spravovaná identita pro prostředky Azure
- Ověřování sady Visual Studio
- Ověřování Azure CLI
- Integrované ověřování systému Windows
K řízení procesu použijte připojovací řetězec předaný konstruktoru AzureServiceTokenProvider
nebo zadaný v proměnné prostředí AzureServicesAuthConnectionString . Podporují se následující možnosti:
Možnost připojovacího řetězce | Scenario | Komentáře |
---|---|---|
RunAs=Developer;DeveloperTool=AzureCli |
Místní vývoj | AzureServiceTokenProvider k získání tokenu používá AzureCli. |
RunAs=Developer;DeveloperTool=VisualStudio |
Místní vývoj | AzureServiceTokenProvider k získání tokenu používá sadu Visual Studio. |
RunAs=CurrentUser |
Místní vývoj | V .NET Core se nepodporuje. AzureServiceTokenProvider k získání tokenu používá Azure AD integrované ověřování. |
RunAs=App |
Spravované identity pro prostředky Azure | AzureServiceTokenProvider používá spravovanou identitu k získání tokenu. |
RunAs=App;AppId={ClientId of user-assigned identity} |
Identita přiřazená uživatelem pro prostředky Azure | AzureServiceTokenProvider k získání tokenu používá identitu přiřazenou uživatelem. |
RunAs=App;AppId={TestAppId};KeyVaultCertificateSecretIdentifier={KeyVaultCertificateSecretIdentifier} |
Ověřování vlastních služeb | KeyVaultCertificateSecretIdentifier je identifikátor tajného klíče certifikátu. |
RunAs=App;AppId={AppId};TenantId={TenantId};CertificateThumbprint={Thumbprint};CertificateStoreLocation={LocalMachine or CurrentUser} |
Instanční objekt | AzureServiceTokenProvider k získání tokenu z Azure AD používá certifikát. |
RunAs=App;AppId={AppId};TenantId={TenantId};CertificateSubjectName={Subject};CertificateStoreLocation={LocalMachine or CurrentUser} |
Instanční objekt | AzureServiceTokenProvider k získání tokenu z Azure AD používá certifikát. |
RunAs=App;AppId={AppId};TenantId={TenantId};AppKey={ClientSecret} |
Instanční objekt | AzureServiceTokenProvider k získání tokenu z Azure AD používá tajný kód. |
ukázky
Pokud chcete zobrazit knihovnu Microsoft.Azure.Services.AppAuthentication
v akci, projděte si následující ukázky kódu.
Řešení potíží s ověřováním aplikací
Běžné problémy při místním vývoji
Azure CLI není nainstalované, nejste přihlášení nebo nemáte nejnovější verzi.
Spuštěním příkazu az account get-access-token zkontrolujte, jestli azure CLI zobrazuje token. Pokud se zobrazí zpráva, že žádný takový program nebyl nalezen, nainstalujte nejnovější verzi Azure CLI. Může se zobrazit výzva k přihlášení.
AzureServiceTokenProvider nemůže najít cestu pro Azure CLI
AzureServiceTokenProvider hledá Azure CLI ve výchozím umístění instalace. Pokud azure CLI nenajde, nastavte proměnnou prostředí AzureCLIPath na instalační složku Azure CLI. AzureServiceTokenProvider přidá proměnnou prostředí do proměnné prostředí Path.
Jste přihlášení k Azure CLI pomocí více účtů, stejný účet má přístup k předplatným ve více tenantech nebo se vám při pokusu o volání během místního vývoje zobrazí chyba Přístup odepřen.
Pomocí Azure CLI nastavte výchozí předplatné na předplatné, které má účet, který chcete použít. Předplatné musí být ve stejném tenantovi jako prostředek, ke který chcete získat přístup: az account set --subscription [subscription-id]. Pokud se nezobrazí žádný výstup, byl úspěšný. Pomocí příkazu az account list ověřte, že je teď správný účet výchozí.
Běžné problémy napříč prostředími
Chyba typu Neoprávněný přístup, Přístup odepřen, Zakázáno nebo podobná chyba
Použitý objekt zabezpečení nemá přístup k prostředku, ke kterému se pokouší získat přístup. Udělte přístup ke svému uživatelskému účtu nebo přispěvateli MSI App Service k prostředku. Který z nich závisí na tom, jestli ukázku spouštíte na místním počítači, nebo jestli ji nasazujete v Azure do App Service. Některé prostředky, jako jsou trezory klíčů, mají také vlastní zásady přístupu , které používáte k udělení přístupu k objektům zabezpečení, jako jsou uživatelé, aplikace a skupiny.
Běžné problémy při nasazení do Azure App Service
Spravovaná identita není nastavená na App Service
Pomocí konzoly ladění Kudu zkontrolujte, MSI_ENDPOINT a MSI_SECRET existují proměnné prostředí. Pokud tyto proměnné prostředí neexistují, spravovaná identita není na App Service povolená.
Běžné problémy při místním nasazení se službou IIS
Při ladění aplikace ve službě IIS nejde načíst tokeny
Ve výchozím nastavení se AppAuth spouští v jiném kontextu uživatele ve službě IIS. Proto nemá přístup k použití vaší vývojářské identity k načtení přístupových tokenů. Službu IIS můžete nakonfigurovat tak, aby běžela s kontextem uživatele, a to pomocí následujících dvou kroků:
Nakonfigurujte fond aplikací pro webovou aplikaci tak, aby běžela jako váš aktuální uživatelský účet. Další informace najdete tady.
Nakonfigurujte "setProfileEnvironment" na "True". Další informace najdete tady.
- Přejít na %windir%\System32\inetsrv\config\applicationHost.config
- Vyhledejte "setProfileEnvironment". Pokud je nastavená na Nepravda, změňte ji na True. Pokud neexistuje, přidejte ho jako atribut do elementu processModel (/configuration/system.applicationHost/applicationPools/applicationPoolDefaults/processModel/@setProfileEnvironment) a nastavte ho na True.
Přečtěte si další informace o spravovaných identitách pro prostředky Azure.
Přečtěte si další informace o scénářích ověřování Azure AD.
Azure SDK for .NET