Sdílet prostřednictvím


Kurz: Připojení aplikace App Service k SQL Database jménem přihlášeného uživatele

V tomto kurzu se dozvíte, jak připojit aplikaci Azure App Service k back-endové databázi Azure SQL zosobněním přihlášeného uživatele, kterému se také říká tok on-behalf-of. Pokud chcete tento tok nakonfigurovat, povolíte integrované ověřování služby App Service pomocí zprostředkovatele identity Microsoft Entra.

Tato metoda připojení je pokročilejší než přístup spravované identity v kurzu: Přístup k datům se spravovanou identitou a má následující výhody v podnikových scénářích:

  • Eliminuje tajné kódy připojení k back-endovým službám, stejně jako přístup spravované identity.
  • Poskytuje back-endové databázi nebo jiné služby Azure větší kontrolu nad tím, kolik přístupu má kdo udělit.
  • Umožňuje aplikaci přizpůsobit svou datovou prezentaci přihlášeným uživatelům.

V tomto kurzu přidáte ověřování Microsoft Entra do webové aplikace .NET, která má back-end služby Azure SQL Database. Naučíte se:

  • Povolte ověřování Microsoft Entra pro Azure SQL Database.
  • Zakažte další možnosti ověřování služby SQL Database.
  • Přidejte ID Microsoft Entra jako zprostředkovatele identity pro vaši aplikaci.
  • Nakonfigurujte oprávnění zosobnění uživatele služby SQL Database.
  • Nakonfigurujte službu App Service tak, aby poskytovala použitelný přístupový token pro SLUŽBU SQL Database.
  • Přístup k databázi Azure SQL jménem přihlášeného uživatele Microsoft Entra.

Po dokončení kurzu se vaše aplikace bezpečně připojí k SQL Database jménem přihlášeného uživatele.

Diagram architektury pro scénář kurzu

Poznámka:

  • Místní SQL Server nepodporuje ID Microsoft Entra.
  • Ověřování Microsoft Entra se liší od integrovaného ověřování systému Windows v místní službě Active Directory (AD) Domain Services (DS). AD DS a Microsoft Entra ID používají zcela jiné ověřovací protokoly. Další informace naleznete v dokumentaci ke službě Microsoft Entra Domain Services.

Požadavky

  • Získejte přístup k tenantovi Microsoft Entra naplněného uživateli a skupinami.

  • Dokončete kurz v kurzu: Vytvoření aplikace ASP.NET Core a SQL Database ve službě Azure App Service a použití dokončené aplikace pro tento kurz.

    Případně můžete přizpůsobit kroky a použít vlastní aplikaci .NET se službou SQL Database. Kroky v tomto kurzu podporují následující verze .NET:

    • .NET Framework 4.8 a novější
    • .NET 6.0 a novější
  • Přihlaste se ke službě Azure Cloud Shell nebo připravte své prostředí na používání Azure CLI.

1. Konfigurace databázového serveru s ověřováním Microsoft Entra

Povolte ověřování Microsoft Entra do databáze Azure SQL tím, že přiřadíte uživatele Microsoft Entra jako správce serveru Azure SQL. Správce Microsoft Entra musí být uživatel, který je vytvořený, importovaný, synchronizovaný nebo pozvaný do Microsoft Entra ID. Uživatel Microsoft Entra nemusí být stejný jako uživatel účtu Microsoft pro předplatné Azure.

Pokud chcete přidat uživatele Microsoft Entra ID jako správce serveru Azure SQL, spusťte následující příkazy Azure CLI.

  1. Použijte az ad user list s parametrem display-name, filternebo upn získat ID objektu pro uživatele Microsoft Entra ID, který chcete nastavit správce. Například následující příkaz uvádí informace pro uživatele Microsoft Entra ID s display-name příjmením jméno.

    az ad user list --display-name "Firstname Lastname"
    

    id Zkopírujte hodnotu z výstupu, kterou chcete použít v dalším kroku.

    Návod

    Můžete spustit samostatný příkaz az ad user list , který zobrazí informace pro všechny uživatele v adresáři Microsoft Entra.

  2. Přidejte uživatele Microsoft Entra ID jako správce na serveru Azure SQL pomocí az sql server ad-admin create parametru object-id . V následujícím příkazu nahraďte <group-name> názvem skupiny prostředků vašeho serveru, <server-name> názvem vašeho serveru minus příponou .database.windows.net a <entra-id>id výstupem z předchozího az ad user list příkazu.

    az sql server ad-admin create --resource-group <group-name> --server-name <server-name> --display-name ADMIN --object-id <entra-id>
    
  3. Omezit ověřování databázového serveru pouze na ověřování Microsoft Entra. Tento krok zakáže ověřování pomocí uživatelského jména a hesla SQL.

    az sql server ad-only-auth enable --resource-group <group-name> --name <server-name>
    

2. Povolení ověřování Microsoft Entra ID pro vaši aplikaci

Přidejte ID Microsoft Entra jako zprostředkovatele identity pro vaši aplikaci. Další informace najdete v tématu Konfigurace ověřování Microsoft Entra pro vaši aplikaci App Services.

  1. Na stránce webu Azure Portal pro vaši aplikaci vyberte v části Nastavení v levé navigační nabídce možnost Ověřování.

  2. Na stránce Ověřování vyberte Přidat zprostředkovatele identity nebo v části Zprostředkovatel identity vyberte Přidat zprostředkovatele.

  3. Na stránce Přidat zprostředkovatele identity vyberte Jako zprostředkovatele Microsoft .

  4. V případě vypršení platnosti tajného klíče klienta vyberte jednu z možností rozevíracího seznamu, například Doporučeno: 180 dní.

  5. Ponechte všechna výchozí nastavení a vyberte Přidat.

    Snímek obrazovky se stránkou přidat zprostředkovatele identity

Poznámka:

Pokud změníte konfiguraci nastavení ověřování aplikace, nemusí se tokeny v úložišti tokenů znovu vygenerovat z nového nastavení. Abyste měli jistotu, že se vaše tokeny znovu vygenerují, odhlaste se a znovu se přihlaste k aplikaci. Jednoduchou metodou je použití prohlížeče v privátním režimu. Po změně nastavení v aplikacích zavřete a znovu otevřete prohlížeč v privátním režimu.

3. Konfigurace zosobnění uživatele služby SQL Database

Udělte aplikaci oprávnění pro přístup ke službě SQL Database jménem přihlášeného uživatele Microsoft Entra.

  1. Na stránce Ověřování aplikace vyberte název vaší aplikace v části Zprostředkovatel identity.

    Otevře se stránka registrace aplikace. Tato registrace se automaticky vygenerovala při přidání poskytovatele Microsoft Entra.

  2. V levé navigační nabídce vyberte oprávnění rozhraní API v části Spravovat .

  3. Na stránce oprávnění rozhraní API vyberte Přidat oprávnění.

  4. Na obrazovce Požádat o oprávnění rozhraní API vyberte kartu Rozhraní API, která moje organizace používá .

  5. Do vyhledávacího pole zadejte Azure SQL Database a vyberte výsledek.

  6. V části Jaký typ oprávnění vaše aplikace vyžaduje, vyberte Delegovaná oprávnění, zaškrtněte políčko vedle user_impersonation a pak vyberte Přidat oprávnění.

    Snímek obrazovky se stránkou Oprávnění rozhraní API požadavku zobrazující delegovaná oprávnění, user_impersonation a vybrané tlačítko Přidat oprávnění

Registrace aplikace v Microsoft Entra teď má požadovaná oprávnění pro připojení ke službě SQL Database zosobněním přihlášeného uživatele.

4. Konfigurace služby App Service pro vrácení použitelného přístupového tokenu

Pokud chcete nakonfigurovat aplikaci tak, aby poskytovala použitelný přístupový token pro SLUŽBU SQL Database, přidáte https://database.windows.net/user_impersonation ji jako zprostředkovatele scopeloginParametersMicrosoft Entra aplikace. Následující příkaz přidá loginParameters vlastnost s vlastními obory do nastavení zprostředkovatele login identity Microsoft Entra.

Z požadovaných oborů služba App Service již požaduje openidprofilea email obory ve výchozím nastavení. Rozsah offline_access je zahrnutý, abyste mohli aktualizovat tokeny. Další informace najdete v tématu Rozsahy OpenID Connect.

Obor https://database.windows.net/user_impersonation odkazuje na Službu Azure SQL Database a poskytuje webový token JSON (JWT), který jako příjemce tokenu určuje službu SQL Database. Tento příkaz se používá jq ke zpracování JSON, které je už nainstalované v Cloud Shellu.

authSettings=$(az webapp auth show --resource-group <group-name> --name <app-name>)
authSettings=$(echo "$authSettings" | jq '.properties' | jq '.identityProviders.azureActiveDirectory.login += {"loginParameters":["scope=openid profile email offline_access https://database.windows.net/user_impersonation"]}')
az webapp auth set --resource-group <group-name> --name <app-name> --body "$authSettings"

Návod

Pokud chcete nakonfigurovat požadovaný obor pomocí webového rozhraní místo Azure CLI, použijte konfiguraci zprostředkovatele Microsoft Entra k poskytování obnovovacích tokenů a přidání https://database.windows.net/user_impersonation do požadovaných oborů.

Vaše aplikace je teď nakonfigurovaná tak, aby vygenerovala přístupový token, který služba SQL Database přijímá.

Poznámka:

Platnost přístupových tokenů vyprší po nějaké době. Informace o tom, jak aktualizovat přístupové tokeny bez nutnosti opětovného ověření uživatelů v aplikaci, najdete v tématu Aktualizace ověřovacích tokenů.

5. Použití přístupového tokenu v kódu aplikace

Aktualizujte kód aplikace tak, aby do objektu připojení přidal přístupový token zadaný ověřováním služby App Service.

Poznámka:

Tento kód nefunguje místně. Další informace a alternativy pro místní ladění najdete v tématu Místní ladění při použití ověřování služby App Service.

  1. DbContext V objektu v DatabaseContext.cs nebo jiném souboru, který konfiguruje kontext databáze, změňte výchozí konstruktor tak, aby do objektu připojení přidal přístupový token Microsoft Entra ID.

    public MyDatabaseContext (DbContextOptions<MyDatabaseContext> options, IHttpContextAccessor accessor)
        : base(options)
    {
        var conn = Database.GetDbConnection() as SqlConnection;
        conn.AccessToken = accessor.HttpContext.Request.Headers["X-MS-TOKEN-AAD-ACCESS-TOKEN"];
    }
    
  2. Pokud máte připojovací řetězec volaný defaultConnection ve službě App Service, který používá ověřování SQL s uživatelským jménem a heslem, pomocí následujícího příkazu odeberte tajné kódy připojení. Nahraďte <group-name>hodnoty a <app-name><db-server-name><db-name> nahraďte hodnotami.

    az webapp config connection-string set --resource-group <group-name> --name <app-name> --connection-string-type SQLAzure --settings defaultConnection="server=tcp:<db-server-name>.database.windows.net;database=<db-name>;"
    

6. Publikování změn

Pokud jste v prohlížeči použili Visual Studio Code k provedení změn kódu ve forku GitHubu, vyberte v nabídce vlevo možnost Správa zdrojového kódu . Zadejte zprávu potvrzení jako OBO connect a vyberte Potvrdit.

Potvrzení aktivuje nasazení GitHub Actions do služby App Service. Počkejte několik minut, než se nasazení dokončí.

Změny můžete publikovat také v Git Bash pomocí následujících příkazů:

git commit -am "configure managed identity"
git push azure main

Pokud je váš kód v sadě Visual Studio:

  1. Klikněte pravým tlačítkem na projekt v Průzkumníku řešení a vyberte Publikovat.

    Snímek obrazovky znázorňující, jak publikovat z Průzkumník řešení v sadě Visual Studio

  2. Na stránce Publikovat vyberte Publikovat.

Když se na nové stránce aplikace zobrazí vaše aplikace, aplikace se připojuje k databázi Azure SQL jménem přihlášeného uživatele Microsoft Entra. Aplikaci byste měli používat a upravovat obvyklým způsobem.

Snímek obrazovky znázorňující webovou aplikaci po publikování

7. Vyčištění prostředků

V předchozích krocích jste vytvořili prostředky Azure ve skupině prostředků. Pokud už tyto prostředky nepotřebujete, odstraňte skupinu prostředků spuštěním následujícího příkazu:

az group delete --name <group-name>

Spuštění tohoto příkazu může nějakou dobu trvat.

Nejčastější dotazy

Proč se mi zobrazuje chyba Přihlášení uživatele tokenem< identifikovaný objekt zabezpečení> se nezdařilo?

Mezi nejběžnější příčiny Login failed for user '<token-identified principal>' chyby patří:

Návody přidat další uživatele nebo skupiny Microsoft Entra ve službě Azure SQL Database?

Pokud chcete přidat další uživatele nebo skupiny, připojte se k databázovému serveru pomocí sqlcmd nebo SQL Server Management Studia (SSMS) a vytvořte uživatele databáze s omezením namapovanými na identity Microsoft Entra.

Následující Transact-SQL příklad přidá identitu Microsoft Entra do SQL Serveru a poskytne identitě některé databázové role:

CREATE USER [<user-or-group-name>] FROM EXTERNAL PROVIDER;
ALTER ROLE db_datareader ADD MEMBER [<user-or-group-name>];
ALTER ROLE db_datawriter ADD MEMBER [<user-or-group-name>];
ALTER ROLE db_ddladmin ADD MEMBER [<user-or-group-name>];
GO

Návody ladit místně při použití ověřování pomocí služby App Service?

Vzhledem k tomu, že ověřování služby App Service je funkce Azure, kód v tomto kurzu nefunguje ve vašem místním prostředí. Na rozdíl od aplikace spuštěné v Azure nemá váš místní kód výhod ověřovacího middlewaru služby App Service. Pro místní ladění můžete použít následující alternativy:

  • Připojte se ke službě SQL Database z místního prostředí s ověřováním Active Directory Interactive . Tento tok ověřování se nepřihlásí samotnému uživateli, ale připojí se k back-endové databázi s přihlášeným uživatelem, abyste mohli otestovat autorizaci databáze místně.
  • Ručně zkopírujte přístupový token do kódu místo hlavičky X-MS-TOKEN-AAD-ACCESS-TOKEN požadavku.
  • Pokud nasadíte ze sady Visual Studio, použijte vzdálené ladění aplikace App Service.

Co se stane, když vyprší platnost přístupových tokenů?

Platnost vašich přístupových tokenů po určité době vyprší. Informace o tom, jak aktualizovat přístupové tokeny bez nutnosti opětovného ověření uživatelů v aplikaci, najdete v tématu Aktualizace tokenů zprostředkovatele identity.