Oktatóanyag: App Service-alkalmazás Csatlakozás az SQL Database-be a bejelentkezett felhasználó nevében

Ez az oktatóanyag bemutatja, hogyan engedélyezheti a beépített hitelesítést egy App Service-alkalmazásban a Microsoft Entra hitelesítési szolgáltató használatával, majd bővítheti azt úgy, hogy egy háttérbeli Azure SQL Database-hez csatlakoztatja a bejelentkezett felhasználót (más néven a folyamat nevében). Ez egy fejlettebb kapcsolati megközelítés az oktatóanyaghoz : Adatok elérése felügyelt identitással , és a következő előnyökkel jár a vállalati forgatókönyvekben:

  • Megszünteti a háttérszolgáltatásokhoz való kapcsolódás titkos kulcsait, csakúgy, mint a felügyelt identitás megközelítését.
  • A háttéradatbázis (vagy bármely más Azure-szolgáltatás) jobban szabályozhatja, hogy ki vagy mennyit adjon az adataihoz és funkcióihoz való hozzáféréshez.
  • Lehetővé teszi, hogy az alkalmazás az adatbemutatót a bejelentkezett felhasználóhoz szabja.

Ebben az oktatóanyagban Microsoft Entra-hitelesítést ad hozzá az alábbi oktatóanyagok egyikében üzembe helyezett minta webalkalmazáshoz:

Ha végzett, a mintaalkalmazás hitelesíti az SQL Database-hez biztonságosan csatlakozó felhasználókat a bejelentkezett felhasználó nevében.

Architecture diagram for tutorial scenario.

Feljegyzés

Az oktatóanyagban ismertetett lépések a következő verziókat támogatják:

  • .NET-keretrendszer 4,8 vagy újabb
  • .NET 6.0 és újabb

A következő tudnivalókat fogja elsajátítani:

  • Beépített hitelesítés engedélyezése az Azure SQL Database-hez
  • Egyéb hitelesítési beállítások letiltása az Azure SQL Database-ben
  • Az App Service-hitelesítés engedélyezése
  • A Microsoft Entra ID használata identitásszolgáltatóként
  • Hozzáférés az Azure SQL Database-hez a bejelentkezett Microsoft Entra-felhasználó nevében

Feljegyzés

A Microsoft Entra-hitelesítés eltér a helyi Active Directory (AD DS) integrált Windows-hitelesítésétől. Az AD DS és a Microsoft Entra ID teljesen eltérő hitelesítési protokollokat használ. További információt a Microsoft Entra Domain Services dokumentációjában talál.

Ha nem rendelkezik Azure-előfizetéssel, első lépésként hozzon létre egy ingyenes Azure-fiókot.

Előfeltételek

Ez a cikk a következő oktatóanyagok valamelyikében folytatja, ahol abbahagyta:

Ha még nem tette meg, először kövesse a két oktatóanyag egyikét. Másik lehetőségként a saját .NET-alkalmazás lépéseit is módosíthatja az SQL Database-lel.

A környezet előkészítése az Azure CLI-re.

Az Azure által üzemeltetett Azure Cloud Shell egy interaktív felület, amelyet a böngészőből használhat. A Bash vagy a PowerShell segítségével is használhatja a Cloud Shellt az Azure-szolgáltatásokhoz. A Cloud Shell előre telepített parancsaival futtathatja a jelen cikkben szereplő kódot anélkül, hogy bármit telepítenie kellene a helyi környezetben.

Az Azure Cloud Shell indítása:

Lehetőség Példa/hivatkozás
Válassza a Kipróbálás lehetőséget egy kód vagy parancsblokk jobb felső sarkában. A Kipróbálás lehetőség választása nem másolja automatikusan a kódot vagy a parancsot a Cloud Shellbe. Screenshot that shows an example of Try It for Azure Cloud Shell.
Látogasson el a https://shell.azure.com webhelyre, vagy kattintson a Cloud Shell indítása gombra a böngészőben. Button to launch Azure Cloud Shell.
Az Azure Portal jobb felső sarkában található menüben kattintson a Cloud Shell gombra. Screenshot that shows the Cloud Shell button in the Azure portal

Az Azure Cloud Shell használata:

  1. Indítsa el a Cloud Shellt.

  2. A kód vagy parancs másolásához kattintson a Másolás gombra egy kódblokkon (vagy parancsblokkon).

  3. Illessze be a kódot vagy parancsot a Cloud Shell-munkamenetbe a Windows és Linux rendszeren a Ctrl Shift+V billentyűkombinációval+, vagy a Cmd+Shift+V macOS rendszeren való kiválasztásával.

  4. A kód vagy parancs futtatásához válassza az Enter lehetőséget .

1. Adatbázis-kiszolgáló konfigurálása Microsoft Entra-hitelesítéssel

Először engedélyezze a Microsoft Entra-hitelesítést az SQL Database-hez egy Microsoft Entra-felhasználó hozzárendelésével a kiszolgáló rendszergazdájaként. Ez a felhasználó eltér attól a Microsoft-fióktól, amelyet az Azure-előfizetésére való regisztrációhoz használt. Olyan felhasználónak kell lennie, akit létrehozott, importált, szinkronizált vagy meghívott a Microsoft Entra-azonosítóba. További információ az engedélyezett Microsoft Entra-felhasználókról: Microsoft Entra-funkciók és korlátozások az SQL Database-ben.

  1. Ha a Microsoft Entra-bérlő még nem rendelkezik felhasználóval, hozzon létre egyet a Felhasználók hozzáadása vagy törlése a Microsoft Entra-azonosítóval című témakörben leírt lépésekkel.

  2. Keresse meg a Microsoft Entra-felhasználó objektumazonosítóját a felhasználónévvel, és cserélje le a felhasználónevet>.az ad user list< Az eredmény egy változóba lesz mentve.

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

    Tipp.

    A Microsoft Entra-azonosítóban található összes felhasználónév listájának megtekintéséhez futtassa a következőt az ad user list --query [].userPrincipalName: .

  3. Adja hozzá ezt a Microsoft Entra-felhasználót Active Directory-rendszergazdaként a Cloud Shell parancsával az sql server ad-admin create . A következő parancsban cserélje le <a kiszolgálónevet> a kiszolgálónévre (utótag .database.windows.net nélkül).

    az sql server ad-admin create --resource-group <group-name> --server-name <server-name> --display-name ADMIN --object-id $azureaduser
    
  4. Az adatbázis-kiszolgáló hitelesítésének korlátozása Active Directory-hitelesítésre. Ez a lépés hatékonyan letiltja az SQL-hitelesítést.

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

Az Active Directory-rendszergazda hozzáadásáról további információt a Microsoft Entra-rendszergazda (SQL Database) kiépítése című témakörben talál.

2. Felhasználói hitelesítés engedélyezése az alkalmazáshoz

Engedélyezi a hitelesítést a Microsoft Entra-azonosítóval identitásszolgáltatóként. További információ: Microsoft Entra-hitelesítés konfigurálása az App Services-alkalmazáshoz.

  1. Az Azure Portal menüjében válassza az Erőforráscsoportok lehetőséget, vagy keressen rá és válassza ki az Erőforráscsoportokat bármelyik lapról.

  2. Az Erőforráscsoportokban keresse meg és válassza ki az erőforráscsoportot, majd válassza ki az alkalmazást.

  3. Az alkalmazás bal oldali menüjében válassza a Hitelesítés, majd az Identitásszolgáltató hozzáadása lehetőséget.

  4. Az Identitásszolgáltató hozzáadása lapon válassza a Microsoftot identitásszolgáltatóként a Microsoft és a Microsoft Entra-identitások bejelentkezéséhez.

  5. Fogadja el az alapértelmezett beállításokat, és válassza a Hozzáadás lehetőséget.

    Screenshot showing the add identity provider page.

Tipp.

Ha hibákba ütközik, és újrakonfigurálja az alkalmazás hitelesítési beállításait, előfordulhat, hogy a jogkivonattárban lévő jogkivonatok nem lesznek újragenerálva az új beállításokból. A jogkivonatok újbóli létrehozásának biztosításához ki kell jelentkeznie, majd újból be kell jelentkeznie az alkalmazásba. Ennek egyszerű módja, hogy a böngészőt privát üzemmódban használja, és bezárja, majd újból megnyitja a böngészőt privát üzemmódban az alkalmazások beállításainak módosítása után.

3. Felhasználói megszemélyesítés konfigurálása az SQL Database-ben

Az Azure-alkalmazás jelenleg alkalmazásbeállításokként felügyelt SQL-hitelesítést (felhasználónevet és jelszót) használ az SQL Database-hez való csatlakozáshoz. Ebben a lépésben engedélyt ad az alkalmazásnak az SQL Database eléréséhez a bejelentkezett Microsoft Entra-felhasználó nevében.

  1. Az alkalmazás Hitelesítés lapján válassza ki az alkalmazás nevét az Identitásszolgáltató területen. Ez az alkalmazásregisztráció automatikusan létre lett hozva Önnek. Válassza ki az API-engedélyeket a bal oldali menüben.

  2. Válassza az Engedély hozzáadása lehetőséget, majd válassza ki a szervezet által használt API-kat.

  3. Írja be az Azure SQL Database-t a keresőmezőbe, és válassza ki az eredményt.

  4. Az Azure SQL Database Kérés API-engedélyeinek lapján válassza a Delegált engedélyek és user_impersonation lehetőséget, majd válassza az Engedélyek hozzáadása lehetőséget.

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

4. Az App Service konfigurálása használható hozzáférési jogkivonat visszaadására

A Microsoft Entra ID-ban az alkalmazásregisztrációnak most már megvannak a szükséges engedélyei az SQL Database-hez való csatlakozáshoz a bejelentkezett felhasználó megszemélyesítésével. Ezután konfigurálja az App Service-alkalmazást, hogy használható hozzáférési jogkivonatot adjon önnek.

A Cloud Shellben futtassa az alábbi parancsokat az alkalmazásban, hogy hozzáadja a scope paramétert a hitelesítési beállításhoz identityProviders.azureActiveDirectory.login.loginParameters.

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"

A parancsok hatékonyan hozzáadnak egy loginParameters további egyéni hatókörökkel rendelkező tulajdonságot. Íme a kért hatókörök magyarázata:

  • openid, profileés email az App Service alapértelmezés szerint már kéri. További információ: OpenID Csatlakozás Scopes.
  • https://database.windows.net/user_impersonation az Azure SQL Database-ra hivatkozik. Ez a hatókör ad egy JWT-jogkivonatot, amely az SQL Database-t tartalmazza jogkivonat-célközönségként.
  • offline_access itt találja a kényelem érdekében (abban az esetben, ha frissíteni szeretné a jogkivonatokat).

Tipp.

A szükséges hatókörök webes felületen való konfigurálásához tekintse meg a Microsoft hitelesítési jogkivonatok frissítésére vonatkozó lépéseit.

Az alkalmazások konfigurálása kész. Az alkalmazás mostantól létrehozhat egy olyan jogkivonatot, amelyet az SQL Database elfogad.

5. A hozzáférési jogkivonat használata az alkalmazáskódban

A projekthez követendő lépések attól függenek, hogy az Entity Frameworkt (az alapértelmezett ASP.NET) vagy az Entity Framework Core-t használja -e (az alapértelmezett ASP.NET Core esetében).

  1. A Visual Studióban nyissa meg a Csomagkezelő konzolt, és frissítse az Entity Frameworkt:

    Update-Package EntityFramework
    
  2. A DbContext objektumban (a Models/MyDbContext.cs alkalmazásban) adja hozzá az alábbi kódot az alapértelmezett konstruktorhoz.

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

Feljegyzés

A kód hozzáadja az App Service-hitelesítés által biztosított hozzáférési jogkivonatot a kapcsolati objektumhoz.

Ez a kódmódosítás helyileg nem működik. További információ: Hogyan hibakeresés helyileg az App Service-hitelesítés használatakor?

6. A módosítások közzététele

  1. Ha a következő oktatóanyagból származik: ASP.NET-alkalmazás létrehozása az Azure-ban SQL Database használatával, sql-hitelesítéssel állít be egy kapcsolati sztring az App Service-ben felhasználónévvel és jelszóval. A következő paranccsal eltávolíthatja a kapcsolati titkos kulcsokat, de cserélje le <a csoportnevet>,< az alkalmazásnevet>, <a db-kiszolgálónevet és <a db-nevet>> a sajátjaira.

    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. Tegye közzé a módosításokat a Visual Studióban. A Solution Explorer (Megoldáskezelő) lapon kattintson a jobb gombbal a DotNetAppSqlDb projektre, és válassza a Publish (Közzététel) elemet.

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

  3. A közzétételi oldalon válassza a Publish (Közzététel) elemet.

Amikor az új weblap megjeleníti a teendőlistát, az alkalmazás a bejelentkezett Microsoft Entra-felhasználó nevében csatlakozik az adatbázishoz.

Azure app after Code First Migration

Most már ugyanúgy szerkesztheti a feladatlistát, mint korábban.

7. Erőforrások törlése

Az előző lépésekben Azure-erőforrásokat hozott létre egy erőforráscsoportban. Ha várhatóan nem lesz szüksége ezekre az erőforrásokra a jövőben, törölje az erőforráscsoportot a következő parancs Cloud Shellben történő futtatásával:

az group delete --name <group-name>

A parancs futtatása egy percig is eltarthat.

Gyakori kérdések

Miért kapok hibaüzenetet Login failed for user '<token-identified principal>'. ?

A hiba leggyakoribb okai a következők:

Hogyan hozzáadni más Microsoft Entra-felhasználókat vagy -csoportokat az Azure SQL Database-ben?

  1. Csatlakozás az adatbázis-kiszolgálóra, például sqlcmd vagy SSMS használatával.

  2. Microsoft Entra-identitásokra leképezett, tartalmazott felhasználók létrehozása az SQL Database dokumentációjában.

    Az alábbi Transact-SQL-példa egy Microsoft Entra-identitást ad hozzá az SQL Serverhez, és adatbázis-szerepköröket ad neki:

    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
    

Hogyan helyi hibakeresést az App Service-hitelesítés használatakor?

Mivel az App Service-hitelesítés az Azure egyik funkciója, nem lehetséges, hogy ugyanaz a kód működjön a helyi környezetben. Az Azure-ban futó alkalmazástól eltérően a helyi kód nem használja ki az App Service hitelesítési köztes szoftverét. Van néhány alternatíva:

  • Csatlakozás az SQL Database-be a helyi környezetbőlActive Directory Interactive. A hitelesítési folyamat nem jelentkezik be a felhasználóba, hanem a bejelentkezett felhasználóval csatlakozik a háttéradatbázishoz, és lehetővé teszi az adatbázis-engedélyezés helyi tesztelését.
  • Másolja manuálisan a hozzáférési jogkivonatot https://<app-name>.azurewebsites.net/.auth/me a kódba a X-MS-TOKEN-AAD-ACCESS-TOKEN kérés fejléce helyett.
  • Ha a Visual Studióból telepíti az alkalmazást, használja az App Service-alkalmazás távoli hibakeresését.

Mi történik a hozzáférési jogkivonatok lejáratakor?

A hozzáférési jogkivonatok bizonyos idő elteltével lejárnak. A hozzáférési jogkivonatok frissítéséről a felhasználók újbóli hitelesítésének megkövetelése nélkül az identitásszolgáltatói jogkivonatok frissítése című témakörben olvashat.

Következő lépések

Az alábbiak elvégzését ismerte meg:

  • Beépített hitelesítés engedélyezése az Azure SQL Database-hez
  • Egyéb hitelesítési beállítások letiltása az Azure SQL Database-ben
  • Az App Service-hitelesítés engedélyezése
  • A Microsoft Entra ID használata identitásszolgáltatóként
  • Hozzáférés az Azure SQL Database-hez a bejelentkezett Microsoft Entra-felhasználó nevében