Udostępnij za pomocą


Samouczek: łączenie aplikacji usługi App Service z usługą SQL Database w imieniu zalogowanego użytkownika

W tym samouczku pokazano, jak połączyć aplikację usługi Azure App Service z bazą danych Azure SQL Database zaplecza, personifikując zalogowanego użytkownika, nazywanego również przepływem w imieniu. Aby skonfigurować ten przepływ, włącz wbudowane uwierzytelnianie usługi App Service przy użyciu dostawcy tożsamości Firmy Microsoft Entra.

Ta metoda łączności jest bardziej zaawansowana niż podejście do tożsamości zarządzanej w artykule Samouczek: uzyskiwanie dostępu do danych przy użyciu tożsamości zarządzanej i ma następujące zalety w scenariuszach przedsiębiorstwa:

  • Eliminuje wpisy tajne połączeń z usługami zaplecza, podobnie jak podejście do tożsamości zarządzanej.
  • Zapewnia zapleczu bazę danych lub inne usługi platformy Azure większą kontrolę nad tym, ile dostępu ma udzielić komu.
  • Umożliwia aplikacji dostosowanie prezentacji danych do zalogowanego użytkownika.

W tym samouczku dodasz uwierzytelnianie microsoft Entra do aplikacji internetowej platformy .NET, która ma zaplecze usługi Azure SQL Database. Uczysz się, jak:

  • Włącz uwierzytelnianie entra firmy Microsoft dla usługi Azure SQL Database.
  • Wyłącz inne opcje uwierzytelniania usługi SQL Database.
  • Dodaj identyfikator Entra firmy Microsoft jako dostawcę tożsamości dla aplikacji.
  • Skonfiguruj uprawnienie personifikacji użytkownika usługi SQL Database.
  • Skonfiguruj usługę App Service w celu zapewnienia użytecznego tokenu dostępu dla usługi SQL Database.
  • Uzyskaj dostęp do bazy danych Azure SQL Database w imieniu zalogowanego użytkownika firmy Microsoft Entra.

Po ukończeniu samouczka aplikacja bezpiecznie łączy się z usługą SQL Database w imieniu zalogowanego użytkownika.

Diagram architektury dla scenariusza samouczka.

Uwaga

  • Identyfikator Entra firmy Microsoft nie jest obsługiwany w przypadku lokalnego programu SQL Server.
  • Uwierzytelnianie firmy Microsoft Entra różni się od zintegrowanego uwierzytelniania systemu Windows w lokalnych usługach Active Directory Domain Services (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.

Wymagania wstępne

1. Konfigurowanie serwera bazy danych przy użyciu uwierzytelniania firmy Microsoft

Włącz uwierzytelnianie microsoft Entra w bazie danych Azure SQL Database, przypisując użytkownika Microsoft Entra jako administratora serwera Azure SQL. Administrator firmy Microsoft Entra musi być użytkownikiem utworzonym, zaimportowanym, zsynchronizowanym lub zaproszonym do identyfikatora Entra firmy Microsoft. Użytkownik Microsoft Entra może nie być taki sam jak użytkownik konta Microsoft dla subskrypcji platformy Azure.

Aby dodać użytkownika Microsoft Entra ID jako administratora serwera Azure SQL, uruchom następujące polecenia interfejsu wiersza polecenia platformy Azure.

  1. Użyj az ad user list parametru display-name, filterlub upn , aby uzyskać identyfikator obiektu dla użytkownika Microsoft Entra ID, który chcesz utworzyć administratora. Na przykład następujące polecenie wyświetla informacje dla użytkownika identyfikatora entra firmy Microsoft z display-name nazwą Lastname.

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

    id Skopiuj wartość z danych wyjściowych do użycia w następnym kroku.

    Napiwek

    Możesz uruchomić az ad user list autonomiczne polecenie , aby wyświetlić informacje dla wszystkich użytkowników w katalogu Microsoft Entra.

  2. Dodaj użytkownika Microsoft Entra ID jako administratora na serwerze Azure SQL server przy użyciu az sql server ad-admin create parametru object-id . W poniższym poleceniu zastąp <group-name> ciąg nazwą grupy zasobów serwera z <server-name> nazwą serwera minus sufiksem .database.windows.net i <entra-id>id danymi wyjściowymi z poprzedniego az ad user list polecenia.

    az sql server ad-admin create --resource-group <group-name> --server-name <server-name> --display-name ADMIN --object-id <entra-id>
    
  3. Ogranicz uwierzytelnianie serwera bazy danych tylko do uwierzytelniania entra firmy Microsoft. Ten krok wyłącza uwierzytelnianie za pomocą nazwy użytkownika i hasła SQL.

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

2. Włączanie uwierzytelniania identyfikatora Entra firmy Microsoft dla aplikacji

Dodaj identyfikator Entra firmy Microsoft jako dostawcę tożsamości dla aplikacji. Aby uzyskać więcej informacji, zobacz Configure Microsoft Entra authentication for your App Services application (Konfigurowanie uwierzytelniania entra firmy Microsoft dla aplikacji usługi App Services).

  1. Na stronie witryny Azure Portal dla aplikacji wybierz pozycję Uwierzytelnianie w obszarze Ustawienia w menu nawigacji po lewej stronie.

  2. Na stronie Uwierzytelnianie wybierz pozycję Dodaj dostawcę tożsamości lub wybierz pozycję Dodaj dostawcę w sekcji Dostawca tożsamości .

  3. Na stronie Dodawanie dostawcy tożsamości wybierz pozycję Microsoft jako dostawca.

  4. W obszarze Wygaśnięcie wpisu tajnego klienta wybierz jedną z opcji listy rozwijanej, takich jak Zalecane: 180 dni.

  5. Zachowaj wszystkie ustawienia domyślne i wybierz pozycję Dodaj.

    Zrzut ekranu przedstawiający stronę dodawania dostawcy tożsamości.

Uwaga

Jeśli ponownie skonfigurujesz ustawienia uwierzytelniania aplikacji, tokeny w magazynie tokenów mogą nie być ponownie generowane z nowych ustawień. Aby upewnić się, że tokeny są ponownie generowane, wyloguj się i zaloguj się ponownie do aplikacji. Prostą metodą jest użycie przeglądarki w trybie prywatnym. Zamknij i otwórz ponownie przeglądarkę w trybie prywatnym po zmianie ustawień w aplikacjach.

3. Konfigurowanie personifikacji użytkownika usługi SQL Database

Udziel aplikacji uprawnień dostępu do usługi SQL Database w imieniu zalogowanego użytkownika firmy Microsoft Entra.

  1. Na stronie Uwierzytelnianie aplikacji wybierz nazwę aplikacji w obszarze Dostawca tożsamości.

    Zostanie otwarta strona rejestracji aplikacji. Ta rejestracja została wygenerowana automatycznie po dodaniu dostawcy firmy Microsoft Entra.

  2. Wybierz pozycję Uprawnienia interfejsu API w obszarze Zarządzaj w menu nawigacji po lewej stronie.

  3. Na stronie Uprawnienia interfejsu API wybierz pozycję Dodaj uprawnienie.

  4. Na ekranie Żądanie uprawnień interfejsu API wybierz kartę Interfejsy API używane przez moją organizację .

  5. Wprowadź wartość Azure SQL Database w polu wyszukiwania i wybierz wynik.

  6. W obszarze Jakiego typu uprawnienia wymaga aplikacja, wybierz pozycję Uprawnienia delegowane, a następnie zaznacz pole wyboru obok pozycji user_impersonation, a następnie wybierz pozycję Dodaj uprawnienia.

    Zrzut ekranu przedstawiający stronę Żądaj uprawnień interfejsu API z uprawnieniami delegowanymi, user_impersonation i wybranym przyciskiem Dodaj uprawnienie.

Rejestracja aplikacji w usłudze Microsoft Entra ma teraz wymagane uprawnienia do nawiązywania połączenia z usługą SQL Database przez personifikację zalogowanego użytkownika.

4. Konfigurowanie usługi App Service w celu zwrócenia tokenu dostępu do użytku

Aby skonfigurować aplikację w celu zapewnienia użytecznego tokenu dostępu dla usługi SQL Database, należy dodać https://database.windows.net/user_impersonation go jako element scope do dostawcy loginParametersMicrosoft Entra aplikacji. Następujące polecenie dodaje loginParameters właściwość z zakresami niestandardowymi do ustawień dostawcy login tożsamości Firmy Microsoft Entra.

W żądanych zakresach usługa App Service domyślnie żąda openidzakresów , profilei email . Zakres offline_access jest uwzględniony, aby można było odświeżyć tokeny. Aby uzyskać więcej informacji, zobacz Zakresy openID Connect.

Zakres https://database.windows.net/user_impersonation odnosi się do usługi Azure SQL Database i udostępnia token internetowy JSON (JWT), który określa usługę SQL Database jako adresata tokenu. To polecenie używa jq do przetwarzania JSON, które jest już zainstalowane w usłudze Cloud Shell.

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"

Napiwek

Aby skonfigurować wymagany zakres przy użyciu interfejsu internetowego zamiast interfejsu wiersza polecenia platformy Azure, użyj polecenia Configure the Microsoft Entra provider to supply refresh tokens (Konfigurowanie dostawcy usługi Microsoft Entra), aby podać tokeny odświeżania, dodając https://database.windows.net/user_impersonation do żądanych zakresów.

Aplikacja jest teraz skonfigurowana do generowania tokenu dostępu akceptowanego przez usługę SQL Database.

Uwaga

Tokeny dostępu wygasają po pewnym czasie. Aby uzyskać informacje na temat odświeżania tokenów dostępu bez konieczności ponownego uwierzytelniania użytkowników przy użyciu aplikacji, zobacz Odświeżanie tokenów uwierzytelniania.

5. Użyj tokenu dostępu w kodzie aplikacji

Zaktualizuj kod aplikacji, aby dodać token dostępu dostarczony przez uwierzytelnianie usługi App Service do obiektu połączenia.

Uwaga

Ten kod nie działa lokalnie. Aby uzyskać więcej informacji i alternatyw dla debugowania lokalnego, zobacz Debugowanie lokalnie podczas korzystania z uwierzytelniania usługi App Service.

  1. DbContext W obiekcie w DatabaseContext.cs lub innym pliku, który konfiguruje kontekst bazy danych, zmień domyślny konstruktor, aby dodać token dostępu Microsoft Entra ID do obiektu połączenia.

    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. Jeśli masz parametry połączenia o nazwie defaultConnection w usłudze App Service, które używają uwierzytelniania SQL z nazwą użytkownika i hasłem, użyj następującego polecenia, aby usunąć wpisy tajne połączenia. Zastąp <group-name>wartości , , <app-name><db-server-name>i <db-name> .

    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. Publikowanie zmian

Jeśli w przeglądarce użyto programu Visual Studio Code w celu wprowadzenia zmian w kodzie w rozwidleniu usługi GitHub, wybierz pozycję Kontrola źródła z menu po lewej stronie. Wprowadź komunikat zatwierdzenia, taki jak OBO connect i wybierz pozycję Zatwierdź.

Zatwierdzenie wyzwala wdrożenie funkcji GitHub Actions w usłudze App Service. Poczekaj kilka minut na zakończenie wdrożenia.

Możesz również opublikować zmiany w powłoce Git Bash przy użyciu następujących poleceń:

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

Jeśli kod znajduje się w programie Visual Studio:

  1. Kliknij prawym przyciskiem myszy projekt w Eksploratorze rozwiązań i wybierz pozycję Publikuj.

    Zrzut ekranu przedstawiający sposób publikowania z Eksplorator rozwiązań w programie Visual Studio.

  2. Na stronie Publikowanie wybierz pozycję Publikuj.

Gdy nowa strona aplikacji wyświetli Aplikację, aplikacja łączy się z bazą danych Azure SQL Database w imieniu zalogowanego użytkownika firmy Microsoft Entra. Aplikacja powinna być używana i edytowana w zwykły sposób.

Zrzut ekranu przedstawiający aplikację internetową po opublikowaniu.

7. Czyszczenie zasobów

W poprzednich krokach utworzono zasoby platformy Azure w grupie zasobów. Jeśli te zasoby nie są już potrzebne, usuń grupę zasobów, uruchamiając następujące polecenie:

az group delete --name <group-name>

Uruchomienie tego polecenia może zająć trochę czasu.

Często zadawane pytania

Dlaczego otrzymuję błąd "Logowanie nie powiodło się dla użytkownika "<podmiot zabezpieczeń> zidentyfikowanych przez token"?

Najczęstsze przyczyny błędu Login failed for user '<token-identified principal>' to:

Jak mogę dodać innych użytkowników lub grup firmy Microsoft w usłudze Azure SQL Database?

Aby dodać więcej użytkowników lub grup, połącz się z serwerem bazy danych przy użyciu narzędzia sqlcmd lub programu SQL Server Management Studio (SSMS) i utwórz zawartych użytkowników bazy danych zamapowanych na tożsamości firmy Microsoft Entra.

Poniższy przykład Transact-SQL dodaje tożsamość firmy Microsoft Entra do programu SQL Server i udostępnia tożsamość niektórych ról bazy danych:

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

Jak mogę debugować lokalnie podczas korzystania z uwierzytelniania usługi App Service?

Ponieważ uwierzytelnianie usługi App Service jest funkcją platformy Azure, kod w tym samouczku nie działa w środowisku lokalnym. W przeciwieństwie do aplikacji działającej na platformie Azure kod lokalny nie korzysta z oprogramowania pośredniczącego uwierzytelniania usługi App Service. Do debugowania lokalnego można użyć następujących alternatyw:

  • Połącz się z usługą SQL Database z poziomu środowiska lokalnego przy użyciu Active Directory Interactive uwierzytelniania. Ten przepływ uwierzytelniania nie loguje się sam użytkownik, ale łączy się z bazą danych zaplecza przy użyciu zalogowanego użytkownika, aby można było przetestować autoryzację bazy danych lokalnie.
  • Ręcznie skopiuj token dostępu do kodu zamiast nagłówka X-MS-TOKEN-AAD-ACCESS-TOKEN żądania.
  • W przypadku wdrażania z poziomu programu Visual Studio użyj zdalnego debugowania aplikacji usługi App Service.

Co się stanie po wygaśnięciu tokenów dostępu?

Token dostępu wygasa po pewnym czasie. Aby uzyskać informacje na temat odświeżania tokenów dostępu bez konieczności ponownego uwierzytelniania użytkowników w aplikacji, zobacz Odświeżanie tokenów dostawców tożsamości.