Samouczek: Połączenie do usługi SQL Database z usługi App Service platformy .NET bez wpisów tajnych przy użyciu tożsamości zarządzanej

Usługa App Service oferuje wysoce skalowalną i samonaprawialną usługę hostingu w Internecie na platformie Azure. Zapewnia także tożsamość zarządzaną dla aplikacji, czyli gotowe rozwiązanie do zabezpieczania dostępu do usługi Azure SQL Database i innych usług platformy Azure. Tożsamości zarządzane w usłudze App Service zwiększają bezpieczeństwo aplikacji przez wyeliminowanie wpisów tajnych z aplikacji, takich jak poświadczenia w parametrach połączenia. W tym samouczku dodasz tożsamość zarządzaną do przykładowej aplikacji internetowej utworzonej w jednym z następujących samouczków:

Po zakończeniu Twoja przykładowa aplikacja będzie bezpiecznie łączyć się z usługą SQL Database bez konieczności podawania nazwy użytkownika i hasła.

Architecture diagram for tutorial scenario.

Uwaga

Kroki opisane w tym samouczku obsługują następujące wersje:

  • .NET Framework 4.8 lub nowszy
  • .NET 6.0 i nowsze

Aby uzyskać wskazówki dotyczące usługi Azure Database for MySQL lub Azure Database for PostgreSQL w innych platformach językowych (Node.js, Python i Java), zobacz Samouczek: Połączenie do baz danych platformy Azure z usługi App Service bez wpisów tajnych korzystających z tożsamości zarządzanej.

Czego nauczysz się:

  • Włączanie tożsamości zarządzanych
  • Udzielanie usłudze SQL Database dostępu do tożsamości zarządzanej
  • Konfigurowanie programu Entity Framework do korzystania z uwierzytelniania firmy Microsoft w usłudze SQL Database
  • Połączenie do usługi SQL Database z programu Visual Studio przy użyciu uwierzytelniania firmy Microsoft Entra

Uwaga

Uwierzytelnianie entra firmy Microsoft różni się od zintegrowanego uwierzytelniania systemu Windows w usłudze lokalna usługa Active Directory (AD DS). Usługi AD DS i Microsoft Entra ID używają zupełnie różnych protokołów uwierzytelniania. Aby uzyskać więcej informacji, zobacz dokumentację usług Microsoft Entra Domain Services.

Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto platformy Azure.

Wymagania wstępne

Ten artykuł będzie kontynuowany w miejscu, w którym zostało to przerwane w jednym z następujących samouczków:

Jeśli jeszcze tego nie zrobiono, najpierw wykonaj jedną z dwóch samouczków. Alternatywnie możesz dostosować kroki dla własnej aplikacji .NET za pomocą usługi SQL Database.

Aby debugować aplikację przy użyciu usługi SQL Database jako zaplecza, upewnij się, że z komputera jest dozwolone połączenie klienta. Jeśli nie, dodaj adres IP klienta, wykonując kroki opisane w temacie Zarządzanie regułami zapory adresów IP na poziomie serwera przy użyciu witryny Azure Portal.

Przygotowanie środowiska do interfejsu wiersza polecenia platformy Azure.

1. Udzielanie dostępu do bazy danych użytkownikowi firmy Microsoft Entra

Najpierw włącz uwierzytelnianie microsoft Entra w usłudze SQL Database, przypisując użytkownika Microsoft Entra jako administratora serwera. Ten użytkownik różni się od konta Microsoft użytego do zarejestrowania się w celu uzyskania subskrypcji platformy Azure. Musi to być użytkownik, który został utworzony, zaimportowany, zsynchronizowany lub zaproszony do usługi Microsoft Entra ID. Aby uzyskać więcej informacji na temat dozwolonych użytkowników microsoft Entra, zobacz Microsoft Entra features and limitations in SQL Database (Funkcje i ograniczenia firmy Microsoft w usłudze SQL Database).

  1. Jeśli dzierżawa firmy Microsoft Entra nie ma jeszcze użytkownika, utwórz go, wykonując kroki opisane w temacie Dodawanie lub usuwanie użytkowników przy użyciu identyfikatora Entra firmy Microsoft.

  2. Znajdź identyfikator obiektu użytkownika Microsoft Entra przy użyciu i zastąp az ad user list wartość <user-principal-name>. Wynik jest zapisywany w zmiennej.

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

    Napiwek

    Aby wyświetlić listę wszystkich głównych nazw użytkowników w identyfikatorze Entra firmy Microsoft, uruchom polecenie az ad user list --query '[].userPrincipalName'.

  3. Dodaj tego użytkownika microsoft Entra jako administratora usługi Active Directory przy użyciu az sql server ad-admin create polecenia w usłudze Cloud Shell. W poniższym poleceniu zastąp <ciąg server-name> nazwą serwera (bez sufiksu.database.windows.net).

    az sql server ad-admin create --resource-group myResourceGroup --server-name <server-name> --display-name ADMIN --object-id $azureaduser
    

Aby uzyskać więcej informacji na temat dodawania administratora usługi Active Directory, zobacz Provision a Microsoft Entra administrator for your server (Aprowizuj administratora usługi Microsoft Entra dla serwera)

2. Konfigurowanie środowiska deweloperskiego

  1. Program Visual Studio dla systemu Windows jest zintegrowany z uwierzytelnianiem firmy Microsoft Entra. Aby włączyć programowanie i debugowanie w programie Visual Studio, dodaj użytkownika microsoft Entra w programie Visual Studio, wybierając pozycję Konto pliku>Ustawienia z menu, a następnie wybierz pozycję Zaloguj się lub Dodaj.

  2. Aby ustawić użytkownika microsoft Entra na potrzeby uwierzytelniania usługi platformy Azure, wybierz pozycję Narzędzia>Opcje z menu, a następnie wybierz pozycję Wybór konta uwierzytelniania>usługi platformy Azure. Wybierz dodanego użytkownika Microsoft Entra i wybierz przycisk OK.

Aby uzyskać więcej informacji na temat konfigurowania środowiska deweloperskiego na potrzeby uwierzytelniania firmy Microsoft Entra, zobacz Biblioteka klienta tożsamości platformy Azure dla platformy .NET.

Teraz możesz przystąpić do tworzenia i debugowania aplikacji przy użyciu usługi SQL Database jako zaplecza przy użyciu uwierzytelniania firmy Microsoft Entra.

3. Modyfikowanie projektu

Uwaga

Microsoft.Azure.Services.AppAuthentication nie jest już zalecane do użycia z nowym zestawem Azure SDK. Jest on zastępowany nową biblioteką klienta tożsamości platformy Azure dostępną dla platform .NET, Java, TypeScript i Python i powinna być używana do wszystkich nowych programowania. Informacje o sposobie migracji do Azure Identityprogramu można znaleźć tutaj: AppAuthentication to Azure.Identity Migration Guidance (Wskazówki dotyczące migracji w usłudze Azure.Identity).

Kroki wykonywane dla projektu zależą od tego, czy używasz platformy Entity Framework Core (domyślnie dla platformy ASP.NET Core) czy Entity Framework (ustawienie domyślne dla ASP.NET).

  1. W programie Visual Studio otwórz konsolę Menedżer pakietów i dodaj pakiet NuGet Microsoft.Data.SqlClient:

    Install-Package Microsoft.Data.SqlClient -Version 5.1.0
    
  2. W samouczku MyDbConnection ASP.NET Core i SQL Database parametry połączenia w pliku appsettings.json nie jest jeszcze używany. Środowisko lokalne i środowisko platformy Azure pobierają parametry połączenia z odpowiednich zmiennych środowiskowych, aby zachować wpisy tajne połączenia z pliku źródłowego. Ale teraz z uwierzytelnianiem usługi Active Directory nie ma więcej wpisów tajnych. W pliku appsettings.json zastąp wartość MyDbConnection parametry połączenia:

    "Server=tcp:<server-name>.database.windows.net;Authentication=Active Directory Default; Database=<database-name>;"
    

    Uwaga

    Domyślny typ uwierzytelniania usługi Active Directory może być używany zarówno na komputerze lokalnym, jak i w usłudze aplikacja systemu Azure. Sterownik próbuje uzyskać token z identyfikatora Entra firmy Microsoft przy użyciu różnych środków. Jeśli aplikacja jest wdrożona, pobiera token z tożsamości zarządzanej aplikacji. Jeśli aplikacja jest uruchomiona lokalnie, próbuje pobrać token z programu Visual Studio, programu Visual Studio Code i interfejsu wiersza polecenia platformy Azure.

    To wszystko, czego potrzebujesz, aby nawiązać połączenie z usługą SQL Database. Podczas debugowania w programie Visual Studio kod używa użytkownika Microsoft Entra skonfigurowanego w wersji 2. Skonfiguruj środowisko deweloperskie. Później skonfigurujesz usługę SQL Database, aby zezwolić na połączenie z tożsamości zarządzanej aplikacji usługi App Service. Klasa DefaultAzureCredential buforuje token w pamięci i pobiera go z identyfikatora Entra firmy Microsoft tuż przed wygaśnięciem. Do odświeżenia tokenu nie jest potrzebny żaden kod niestandardowy.

  3. Wpisz Ctrl+F5 polecenie , aby ponownie uruchomić aplikację. Ta sama aplikacja CRUD w przeglądarce łączy się teraz bezpośrednio z usługą Azure SQL Database przy użyciu uwierzytelniania microsoft Entra. Ta konfiguracja umożliwia uruchamianie migracji baz danych z programu Visual Studio.

4. Używanie łączności tożsamości zarządzanej

Następnie skonfigurujesz aplikację usługi App Service tak, aby łączyła się z usługą SQL Database przy użyciu przypisanej przez system tożsamości zarządzanej.

Uwaga

Chociaż instrukcje w tej sekcji dotyczą tożsamości przypisanej przez system, tożsamość przypisana przez użytkownika może być tak samo stosowana. W tym celu: Aby przypisać żądaną tożsamość przypisaną przez użytkownika, konieczna będzie zmiana az webapp identity assign command . Następnie podczas tworzenia użytkownika SQL upewnij się, że używasz nazwy zasobu tożsamości przypisanej przez użytkownika, a nie nazwy witryny.

Włączanie tożsamości zarządzanej w aplikacji

Aby włączyć tożsamość zarządzanej dla aplikacji platformy Azure, użyj polecenia az webapp identity assign w usłudze Cloud Shell. W poniższym poleceniu zastąp ciąg app-name>.<

az webapp identity assign --resource-group myResourceGroup --name <app-name>

Uwaga

Aby włączyć tożsamość zarządzaną dla miejsca wdrożenia, dodaj --slot <slot-name> i użyj nazwy miejsca w< polu nazwa-miejsca>.

Poniżej przedstawiono przykładowe dane wyjściowe:

{
  "additionalProperties": {},
  "principalId": "21dfa71c-9e6f-4d17-9e90-1d28801c9735",
  "tenantId": "72f988bf-86f1-41af-91ab-2d7cd011db47",
  "type": "SystemAssigned"
}

Udzielanie uprawnień tożsamości zarządzanej

Uwaga

Jeśli chcesz, możesz dodać tożsamość do grupy Microsoft Entra, a następnie przyznać usłudze SQL Database dostęp do grupy Microsoft Entra zamiast tożsamości. Na przykład następujące polecenia dodają tożsamość zarządzaną z poprzedniego kroku do nowej grupy o nazwie myAzureSQLDBAccessGroup:

$groupid=(az ad group create --display-name myAzureSQLDBAccessGroup --mail-nickname myAzureSQLDBAccessGroup --query objectId --output tsv)
$msiobjectid=(az webapp identity show --resource-group myResourceGroup --name <app-name> --query principalId --output tsv)
az ad group member add --group $groupid --member-id $msiobjectid
az ad group member list -g $groupid
  1. W usłudze Cloud Shell zaloguj się do usługi SQL Database przy użyciu polecenia SQLCMD. Zastąp ciąg nazwa-serwera> nazwą serwera,< nazwą bazy> danych używaną przez aplikację,< aad-user-name> i <aad-password> poświadczeniami użytkownika firmy Microsoft Entra.<

    sqlcmd -S <server-name>.database.windows.net -d <db-name> -U <aad-user-name> -P "<aad-password>" -G -l 30
    
  2. W wierszu polecenia SQL dla żądanej bazy danych uruchom następujące polecenia, aby udzielić minimalnych uprawnień wymaganych przez aplikację. Przykład:

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

    <identity-name> to nazwa tożsamości zarządzanej w usłudze Microsoft Entra ID. Jeśli tożsamość jest przypisana przez system, nazwa jest zawsze taka sama jak nazwa aplikacji usługi App Service. W przypadku miejsca wdrożenia nazwa przypisanej przez system tożsamości to< app-name>/slots/<slot-name>. Aby udzielić uprawnień grupie Microsoft Entra, użyj nazwy wyświetlanej grupy (na przykład myAzureSQLDBAccessGroup).

  3. Wpisz polecenie EXIT, aby powrócić do wiersza polecenia usługi Cloud Shell.

    Uwaga

    Usługi zaplecza tożsamości zarządzanych utrzymują również pamięć podręczną tokenów, która aktualizuje token dla zasobu docelowego tylko wtedy, gdy wygaśnie. Jeśli popełnisz błąd podczas konfigurowania uprawnień usługi SQL Database i spróbujesz zmodyfikować uprawnienia po próbie uzyskania tokenu z aplikacją, nie otrzymasz nowego tokenu ze zaktualizowanymi uprawnieniami do momentu wygaśnięcia buforowanego tokenu.

    Uwaga

    Identyfikator entra firmy Microsoft i tożsamości zarządzane nie są obsługiwane w przypadku lokalnego programu SQL Server.

Modyfikowanie parametrów połączenia

Pamiętaj, że te same zmiany wprowadzone w pliku Web.config lub appsettings.json działają z tożsamością zarządzaną, więc jedyną rzeczą do zrobienia jest usunięcie istniejących parametry połączenia w usłudze App Service, które program Visual Studio utworzył podczas wdrażania aplikacji po raz pierwszy. Użyj następującego polecenia, ale zastąp <ciąg app-name> nazwą aplikacji.

az webapp config connection-string delete --resource-group myResourceGroup --name <app-name> --setting-names MyDbConnection

5. Publikowanie zmian

Teraz pozostało tylko opublikowanie zmian na platformie Azure.

  1. Jeśli pochodzisz z artykułu Samouczek: tworzenie aplikacji ASP.NET na platformie Azure przy użyciu usługi SQL Database, opublikuj zmiany w programie Visual Studio. W obszarze Eksplorator rozwiązań kliknij prawym przyciskiem myszy projekt DotNetAppSqlDb i wybierz polecenie Publikuj.

    Publish from Solution Explorer

  2. Na stronie publikowania wybierz pozycję Publikuj.

    Ważne

    Upewnij się, że nazwa usługi app Service nie jest zgodna z żadną istniejącą rejestracją aplikacji. Spowoduje to konflikty identyfikatorów głównych.

Gdy nowa strona internetowa wyświetla listę zadań do wykonania, aplikacja nawiązuje połączenie z bazą danych za pomocą tożsamości zarządzanej.

Azure app after Code First Migration

Teraz powinno być możliwe edytowanie listy zadań do wykonania tak jak wcześniej.

Czyszczenie zasobów

W poprzednich krokach utworzono zasoby platformy Azure w grupie zasobów. Jeśli te zasoby nie będą raczej potrzebne w przyszłości, usuń grupę zasobów, uruchamiając następujące polecenie w usłudze Cloud Shell:

az group delete --name myResourceGroup

Wykonanie tego polecenia może potrwać około minutę.

Następne kroki

Które czynności umiesz wykonać:

  • Włączanie tożsamości zarządzanych
  • Udzielanie usłudze SQL Database dostępu do tożsamości zarządzanej
  • Konfigurowanie programu Entity Framework do korzystania z uwierzytelniania firmy Microsoft w usłudze SQL Database
  • Połączenie do usługi SQL Database z programu Visual Studio przy użyciu uwierzytelniania firmy Microsoft Entra