Kurz: Připojení aplikaci služby App Service do SLUŽBY SQL Database jménem přihlášeného uživatele

V tomto kurzu se dozvíte, jak povolit integrované ověřování v aplikaci Služby App Service pomocí zprostředkovatele ověřování Microsoft Entra a pak ho rozšířit připojením k back-endové službě Azure SQL Database zosobněním přihlášeného uživatele (označovaného také jako on-behalf-of flow). Toto je pokročilejší přístup k připojení k kurzu: Přístup k datům se spravovanou identitou a má v podnikových scénářích následující výhody:

  • Eliminuje tajné kódy připojení k back-endovým službám stejně jako přístup spravované identity.
  • Poskytuje back-end databázi (nebo jakoukoli jinou službu Azure) větší kontrolu nad tím, kdo nebo kolik má udělit přístup k datům a funkcím.
  • 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 ukázkové webové aplikace, kterou jste nasadili v jednom z následujících kurzů:

Jakmile budete hotovi, vaše ukázková aplikace ověří uživatele, kteří se bezpečně připojí ke službě SQL Database jménem přihlášeného uživatele.

Architecture diagram for tutorial scenario.

Poznámka:

Kroky popsané v tomto kurzu podporují následující verze:

  • .NET Framework 4.8 a vyšší
  • .NET 6.0 a vyšší

Co se naučíte:

  • Povolení integrovaného ověřování pro Azure SQL Database
  • Zakázání dalších možností ověřování ve službě Azure SQL Database
  • Povolení ověřování pomocí služby App Service
  • Použití ID Microsoft Entra jako zprostředkovatele identity
  • Přístup ke službě Azure SQL Database jménem přihlášeného uživatele Microsoft Entra

Poznámka:

Ověřování Microsoft Entra se liší od integrovaného ověřování systému Windows v místní Active Directory (AD 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.

Pokud ještě nemáte předplatné Azure, vytvořte si bezplatný účet Azure před tím, než začnete.

Požadavky

Tento článek pokračuje tam, kde jste skončili v některém z následujících kurzů:

Pokud jste to ještě neudělali, nejprve si projděte jeden ze dvou kurzů. Případně můžete přizpůsobit kroky pro vlastní aplikaci .NET pomocí SLUŽBY SQL Database.

Připravte prostředí pro Azure CLI.

Azure hostí interaktivní prostředí Azure Cloud Shell, které můžete používat v prohlížeči. Pro práci se službami Azure můžete v prostředí Cloud Shell použít buď Bash, nebo PowerShell. Předinstalované příkazy Cloud Shellu můžete použít ke spuštění kódu v tomto článku, aniž byste museli instalovat cokoli do místního prostředí.

Spuštění služby Azure Cloud Shell:

Možnost Příklad nebo odkaz
Vyberte Vyzkoušet v pravém horním rohu bloku kódu nebo příkazu. Výběrem možnosti Vyzkoušet se kód ani příkaz automaticky nekopíruje do Cloud Shellu. Screenshot that shows an example of Try It for Azure Cloud Shell.
Přejděte na adresu https://shell.azure.com nebo výběrem tlačítka Spustit Cloud Shell otevřete Cloud Shell v prohlížeči. Button to launch Azure Cloud Shell.
Zvolte tlačítko Cloud Shell v pruhu nabídky v pravém horním rohu webu Azure Portal. Screenshot that shows the Cloud Shell button in the Azure portal

Použití Azure Cloud Shellu:

  1. Spusťte Cloud Shell.

  2. Výběrem tlačítka Kopírovat v bloku kódu (nebo bloku příkazů) zkopírujte kód nebo příkaz.

  3. Vložte kód nebo příkaz do relace Cloud Shellu tak, že ve Windows a Linuxu vyberete ctrl+Shift+V nebo vyberete Cmd+Shift+V v macOS.

  4. Stisknutím klávesy Enter spusťte kód nebo příkaz.

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

Nejprve povolte ověřování Microsoft Entra službě SQL Database přiřazením uživatele Microsoft Entra jako správce serveru. Tento uživatel se liší od účtu Microsoft, který jste použili k registraci předplatného Azure. Musí se jednat o uživatele, kterého jste vytvořili, importovali, synchronizovali nebo pozvali do MICROSOFT Entra ID. Další informace o povolených uživatelích Microsoft Entra naleznete v tématu Microsoft Entra funkce a omezení ve službě SQL Database.

  1. Pokud váš tenant Microsoft Entra ještě nemá uživatele, vytvořte ho podle pokynů v tématu Přidání nebo odstranění uživatelů pomocí ID Microsoft Entra.

  2. Vyhledejte ID objektu uživatele Microsoft Entra pomocí az ad user list a nahraďte <hlavní název> uživatele. Výsledek se uloží do proměnné.

    azureaduser=$(az ad user list --filter "userPrincipalName eq '<user-principal-name>'" --query [].id --output tsv)
    

    Tip

    Pokud chcete zobrazit seznam všech hlavních názvů uživatelů v Microsoft Entra ID, spusťte az ad user list --query [].userPrincipalNamepříkaz .

  3. Přidejte tohoto uživatele Microsoft Entra jako správce služby Active Directory pomocí az sql server ad-admin create příkazu v Cloud Shellu. V následujícím příkazu nahraďte <název> serveru názvem serveru (bez přípony .database.windows.net ).

    az sql server ad-admin create --resource-group <group-name> --server-name <server-name> --display-name ADMIN --object-id $azureaduser
    
  4. Omezte ověřování databázového serveru na ověřování active directory. Tento krok efektivně zakáže ověřování SQL.

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

Další informace o přidání správce služby Active Directory naleznete v tématu Zřízení správce Microsoft Entra (SQL Database).</a0>

2. Povolení ověřování uživatelů pro vaši aplikaci

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

  1. V nabídce webu Azure Portal vyberte Skupiny prostředků nebo vyhledejte a vyberte Skupiny prostředků z libovolné stránky.

  2. Ve skupinách prostředků vyhledejte a vyberte skupinu prostředků a pak vyberte aplikaci.

  3. V nabídce vlevo vaší aplikace vyberte Ověřování a pak vyberte Přidat zprostředkovatele identity.

  4. Na stránce Přidat zprostředkovatele identity vyberte Microsoft jako zprostředkovatele identity pro přihlášení k Microsoftu a identitám Microsoft Entra.

  5. Přijměte výchozí nastavení a vyberte Přidat.

    Screenshot showing the add identity provider page.

Tip

Pokud narazíte na chyby a změníte konfiguraci nastavení ověřování vaší aplikace, nemusí se tokeny v úložišti tokenů znovu vygenerovat z nového nastavení. Pokud chcete zajistit opětovné vygenerování tokenů, musíte se z aplikace odhlásit a znovu se k ní přihlásit. Snadným způsobem, jak to provést, je použít prohlížeč v privátním režimu a po změně nastavení aplikací zavřít a znovu otevřít prohlížeč v privátním režimu.

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

V současné době se vaše aplikace Azure připojuje ke službě SQL Database a používá ověřování SQL (uživatelské jméno a heslo) spravované jako nastavení aplikace. V tomto kroku udělíte 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. Tato registrace aplikace se pro vás automaticky vygenerovala. V nabídce vlevo vyberte oprávnění rozhraní API.

  2. Vyberte Přidat oprávnění a pak vyberte rozhraní API, která moje organizace používá.

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

  4. Na stránce Oprávnění rozhraní API požadavku pro Azure SQL Database vyberte Delegovaná oprávnění a user_impersonation a pak vyberte Přidat oprávnění.

    Screenshot of the Request API permissions page showing Delegated permissions, user_impersonation, and the Add permission button selected.

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

Registrace aplikace v Microsoft Entra ID teď má požadovaná oprávnění pro připojení ke službě SQL Database zosobněním přihlášeného uživatele. Dále nakonfigurujete aplikaci App Service tak, aby vám poskytla použitelný přístupový token.

V Cloud Shellu spusťte v aplikaci následující příkazy pro přidání scope parametru do nastavení identityProviders.azureActiveDirectory.login.loginParametersověřování .

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"

Příkazy efektivně přidávají loginParameters vlastnost s dalšími vlastními obory. Tady je vysvětlení požadovaných oborů:

  • openidemail a profileslužba App Service je již ve výchozím nastavení požadována. Informace najdete v tématu OpenID Připojení obory.
  • https://database.windows.net/user_impersonation odkazuje na Azure SQL Database. Je to obor, který poskytuje token JWT, který zahrnuje SLUŽBU SQL Database jako cílovou skupinu tokenů.
  • offline_access je zde k dispozici pro usnadnění práce (pro případ, že chcete aktualizovat tokeny).

Tip

Pokud chcete místo toho nakonfigurovat požadované obory pomocí webového rozhraní, přečtěte si postup Microsoftu v části Aktualizace ověřovacích tokenů.

Vaše aplikace jsou teď nakonfigurované. Aplikace teď může vygenerovat token, který služba SQL Database přijme.

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

Postup, který použijete pro svůj projekt, závisí na tom, jestli používáte Entity Framework (výchozí pro ASP.NET) nebo Entity Framework Core (výchozí pro ASP.NET Core).

  1. V sadě Visual Studio otevřete konzolu Správce balíčků a aktualizujte Entity Framework:

    Update-Package EntityFramework
    
  2. Do objektu DbContext (v models/MyDbContext.cs) přidejte do výchozího konstruktoru následující kód.

    var conn = (System.Data.SqlClient.SqlConnection)Database.Connection;
    conn.AccessToken = System.Web.HttpContext.Current.Request.Headers["X-MS-TOKEN-AAD-ACCESS-TOKEN"];
    

Poznámka:

Kód přidá přístupový token zadaný ověřováním služby App Service k objektu připojení.

Tato změna kódu nefunguje místně. Další informace najdete v tématu Návody místní ladění při použití ověřování služby App Service?.

6. Publikování změn

  1. Pokud jste přišli z kurzu: Vytvoření aplikace ASP.NET v Azure pomocí SLUŽBY SQL Database, nastavíte připojovací řetězec ve službě App Service pomocí 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í, ale nahraďte <název>_skupiny,< název>_aplikace, <db-server-name> a <db-name> za vaše.

    az webapp config connection-string set --resource-group <group-name> --name <app-name> --connection-string-type SQLAzure --settings MyDbConnection="server=tcp:<db-server-name>.database.windows.net;database=<db-name>;"
    
  2. Publikujte změny v sadě Visual Studio. V Průzkumníku řešení klikněte pravým tlačítkem na projekt DotNetAppSqlDb a vyberte Publikovat.

    Screenshot showing how to publish from the Solution Explorer in Visual Studio.

  3. Na stránce publikování vyberte Publikovat.

Když se na nové webové stránce zobrazí seznam úkolů, vaše aplikace se připojuje k databázi jménem přihlášeného uživatele Microsoft Entra.

Azure app after Code First Migration

Teď byste měli mít možnost upravovat seznam úkolu stejně jako předtím.

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

V předchozích krocích jste vytvořili prostředky Azure ve skupině prostředků. Pokud předpokládáte, že už tyto prostředky nebudete potřebovat, odstraňte skupinu prostředků spuštěním následujícího příkazu ve službě Cloud Shell:

az group delete --name <group-name>

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

Nejčastější dotazy

Proč se mi zobrazuje Login failed for user '<token-identified principal>'. chyba?

Mezi nejběžnější příčiny této chyby patří:

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

  1. Připojení k databázovému serveru, jako je sqlcmd nebo SSMS.

  2. Vytvoření uživatelů s omezením namapovaných na identity Microsoft Entra v dokumentaci ke službě SQL Database

    Následující příklad jazyka Transact-SQL přidá do SQL Serveru identitu Microsoft Entra a poskytne jí 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 v Azure, není možné, aby stejný kód fungoval ve vašem místním prostředí. Na rozdíl od aplikace spuštěné v Azure váš místní kód nemá prospěch z ověřovacího middlewaru ze služby App Service. Máte několik alternativ:

  • Připojení do SLUŽBY SQL Database z místního prostředí pomocí Active Directory Interactivenástroje . Tok ověřování se nepřihlásí uživateli k samotné aplikaci, ale připojí se k back-endové databázi s přihlášeným uživatelem a umožňuje místně otestovat autorizaci databáze.
  • Ručně zkopírujte přístupový token z https://<app-name>.azurewebsites.net/.auth/me 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.

Další kroky

Naučili jste se:

  • Povolení integrovaného ověřování pro Azure SQL Database
  • Zakázání dalších možností ověřování ve službě Azure SQL Database
  • Povolení ověřování pomocí služby App Service
  • Použití ID Microsoft Entra jako zprostředkovatele identity
  • Přístup ke službě Azure SQL Database jménem přihlášeného uživatele Microsoft Entra