Поделиться через


Учебник: Подключение приложения App Service к базе данных SQL от имени авторизованного пользователя

В этом руководстве показано, как подключить приложение Службы приложений Azure к серверной базе данных SQL Azure, олицетворив пользователя, выполнившего вход, также называемый потоком от имени. Чтобы настроить этот поток, включите встроенную проверку подлинности службы приложений с помощью поставщика удостоверений Microsoft Entra.

Этот метод подключения является более сложным, чем подход к управляемому удостоверению в руководстве. Доступ к данным с управляемым удостоверением и имеет следующие преимущества в корпоративных сценариях:

  • Устраняет секреты подключения к внутренним службам, как и подход к управляемому удостоверению.
  • Предоставляет серверную базу данных или другие службы Azure больше контроля над тем, сколько доступа к кому предоставляется.
  • Позволяет приложению адаптировать презентацию данных для пользователя, вошедшего в систему.

В этом руководстве описано, как добавить проверку подлинности Microsoft Entra в веб-приложение .NET с серверной частью базы данных SQL Azure. Вы узнаете, как:

  • Включите проверку подлинности Microsoft Entra для базы данных SQL Azure.
  • Отключите другие параметры проверки подлинности базы данных SQL.
  • Добавьте идентификатор Microsoft Entra в качестве поставщика удостоверений для приложения.
  • Настройка разрешения олицетворения пользователя базы данных SQL.
  • Настройте службу приложений для предоставления доступного маркера доступа для базы данных SQL.
  • Доступ к базе данных SQL Azure от имени пользователя Microsoft Entra, выполнившего вход.

После завершения работы с руководством приложение безопасно подключается к базе данных SQL от имени пользователя, вошедшего в систему.

Схема архитектуры для сценария учебника.

Примечание.

Необходимые условия

  • Доступ к клиенту Microsoft Entra, заполненным пользователями и группами.

  • Ознакомьтесь с руководством по созданию приложения ASP.NET Core и Базы данных SQL в Службе приложений Azure и используйте готовое приложение для этого руководства.

    Кроме того, адаптируйте шаги и используйте собственное приложение .NET с базой данных SQL. Действия, описанные в этом руководстве, поддерживают следующие версии .NET:

    • .NET Framework 4.8 и более поздних версий
    • .NET 6.0 и более поздних версий
  • Войдите в Azure Cloud Shell или подготовьте среду для использования Azure CLI.

1. Настройка сервера базы данных с помощью проверки подлинности Microsoft Entra

Включите проверку подлинности Microsoft Entra в базу данных SQL Azure, назначив пользователя Microsoft Entra в качестве администратора сервера SQL Azure. Администратор Microsoft Entra должен быть пользователем, созданным, импортированным, синхронизированным или приглашенным в идентификатор Microsoft Entra. Пользователь Microsoft Entra может не совпадать с пользователем учетной записи Майкрософт для подписки Azure.

Чтобы добавить пользователя Microsoft Entra ID в качестве администратора сервера SQL Azure, выполните следующие команды Azure CLI.

  1. Используйте az ad user list с параметром display-name, filterили upn параметром, чтобы получить идентификатор объекта для пользователя Microsoft Entra ID, который вы хотите сделать администратором. Например, следующая команда содержит сведения для пользователя Идентификатора Microsoft Entra с display-name именем Lastname.

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

    id Скопируйте значение из выходных данных, которое будет использоваться на следующем шаге.

    Совет

    Можно запустить az ad user list автономный запуск, чтобы отобразить сведения для всех пользователей в каталоге Microsoft Entra.

  2. Добавьте пользователя Microsoft Entra ID в качестве администратора на сервере SQL Azure с object-id помощью az sql server ad-admin create параметра. В следующей команде замените <group-name> имя группы ресурсов сервера на имя <server-name> сервера минус .database.windows.net суффикс и <entra-id>id выходные данные предыдущей az ad user list команды.

    az sql server ad-admin create --resource-group <group-name> --server-name <server-name> --display-name ADMIN --object-id <entra-id>
    
  3. Ограничить проверку подлинности сервера базы данных только проверкой подлинности Microsoft Entra. Этот шаг отключает проверку подлинности имени пользователя и пароля SQL.

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

2. Включение проверки подлинности идентификатора Microsoft Entra для приложения

Добавьте идентификатор Microsoft Entra в качестве поставщика удостоверений для приложения. Дополнительные сведения см. в разделе "Настройка аутентификации Microsoft Entra для приложения службы приложений".

  1. На странице портала Azure для приложения выберите "Проверка подлинности " в разделе "Параметры" в меню навигации слева.

  2. На странице проверки подлинности выберите "Добавить поставщика удостоверений" или выберите "Добавить поставщика " в разделе "Поставщик удостоверений ".

  3. На странице "Добавление поставщика удостоверений" выберите Майкрософт в качестве поставщика.

  4. Для истечения срока действия секрета клиента выберите один из вариантов раскрывающегося списка, например рекомендуемые: 180 дней.

  5. Сохраните все параметры по умолчанию и нажмите кнопку "Добавить".

    Снимок экрана: страница для добавления поставщика удостоверений.

Примечание.

При перенастройке параметров проверки подлинности приложения маркеры в хранилище маркеров могут не повторно создаваться из новых параметров. Чтобы убедиться, что маркеры повторно создаются, выйдите и войдите в приложение. Простой способ — использовать браузер в частном режиме. Закройте и снова откройте браузер в частном режиме после изменения параметров в приложениях.

3. Настройка олицетворения пользователя базы данных SQL

Предоставьте приложению разрешения на доступ к базе данных SQL от имени пользователя Microsoft Entra, вошедшего в систему.

  1. На странице проверки подлинности приложения выберите имя приложения в разделе "Поставщик удостоверений".

    Откроется страница регистрации приложения. Эта регистрация была автоматически создана при добавлении поставщика Microsoft Entra.

  2. Выберите разрешения APIв меню навигации слева.

  3. На странице разрешений API нажмите кнопку "Добавить разрешение".

  4. На экране разрешений API запроса выберите API, которые используются в моей организации .

  5. Введите базу данных SQL Azure в поле поиска и выберите результат.

  6. В разделе "Какой тип разрешений требуется приложение", выберите делегированные разрешения, а затем установите флажок рядом с user_impersonation, а затем нажмите кнопку "Добавить разрешения".

    Снимок экрана: страница разрешений API запроса с делегированными разрешениями, user_impersonation и выбранной кнопкой

Регистрация приложения в Microsoft Entra теперь имеет необходимые разрешения для подключения к базе данных SQL путем олицетворения пользователя, выполнившего вход.

4. Настройте службу приложений, чтобы возвращать пригодный для использования токен доступа

Чтобы настроить приложение для предоставления маркера доступа для базы данных SQL, добавьте https://database.windows.net/user_impersonation в качестве scope поставщика loginParametersMicrosoft Entra приложения. Следующая команда добавляет loginParameters свойство с настраиваемыми областями в параметры поставщика login удостоверений Microsoft Entra.

Из запрошенных областей, служба приложений уже запрашивает openidprofileи email области по умолчанию. Область offline_access включена, чтобы можно было обновить маркеры. Дополнительные сведения см. в разделе "Области OpenID Connect".

Область https://database.windows.net/user_impersonation относится к базе данных SQL Azure и предоставляет веб-токен JSON (JWT), указывающий базу данных SQL в качестве получателя маркера. Эта команда используется jq для обработки JSON, которая уже установлена в 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"

Совет

Чтобы настроить требуемую область с помощью веб-интерфейса, а не Azure CLI, используйте настройку поставщика Microsoft Entra для предоставления маркеров обновления, добавляя https://database.windows.net/user_impersonation к запрошенным областям.

Теперь приложение настроено для создания маркера доступа, который принимает база данных SQL.

Примечание.

Срок действия маркеров доступа истекает через некоторое время. Сведения об обновлении маркеров доступа без необходимости повторной проверки подлинности пользователей в приложении см. в разделе "Обновить маркеры проверки подлинности".

5. Используйте маркер доступа в коде приложения

Обновите код приложения, чтобы добавить маркер доступа, предоставленный проверкой подлинности службы приложений, в объект подключения.

Примечание.

Этот код не работает локально. Дополнительные сведения и альтернативные варианты для локальной отладки см. в разделе "Отладка локально" при использовании проверки подлинности службы приложений.

  1. DbContext В объекте в DatabaseContext.cs или другом файле, который настраивает контекст базы данных, измените конструктор по умолчанию, чтобы добавить маркер доступа Идентификатора Microsoft Entra к объекту подключения.

    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. Если у вас есть строка подключения, вызываемая defaultConnection в службе приложений, использующая проверку подлинности SQL с именем пользователя и паролем, используйте следующую команду, чтобы удалить секреты подключения. Замените <group-name>, <db-server-name><app-name>и <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. Публикация изменений

Если вы использовали Visual Studio Code в браузере для внесения изменений кода в вилку GitHub, выберите элемент управления версиями в меню слева. Введите сообщение фиксации, например OBO connect и нажмите кнопку "Фиксация".

Коммит активирует развертывание с помощью GitHub Actions в Службе приложений. Подождите несколько минут, пока развертывание завершится.

Вы также можете опубликовать изменения в Git Bash с помощью следующих команд:

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

Если код находится в Visual Studio:

  1. Щелкните проект правой кнопкой мыши в обозревателе решений и выберите "Опубликовать".

    Снимок экрана, показывающий, как публиковать из обозревателя решений в Visual Studio.

  2. На странице публикации выберите "Опубликовать".

Когда на новой странице приложения отображается приложение, приложение подключается к базе данных SQL Azure от имени пользователя Microsoft Entra, вошедшего в систему. Вы должны иметь возможность использовать и изменять приложение как обычно.

Снимок экрана: веб-приложение после публикации.

7. Очистка ресурсов

На предыдущем шаге вы создали ресурсы Azure в группе ресурсов. Если эти ресурсы больше не нужны, удалите группу ресурсов, выполнив следующую команду:

az group delete --name <group-name>

Эта команда может занять некоторое время для выполнения.

Часто задаваемые вопросы

Почему возникает ошибка входа для пользователя "<определяемый токеном субъект>"?

Наиболее распространенными причинами Login failed for user '<token-identified principal>' ошибки являются:

Как добавить других пользователей или группы Microsoft Entra в базе данных SQL Azure?

Чтобы добавить больше пользователей или групп, подключитесь к серверу базы данных с помощью sqlcmd или SQL Server Management Studio (SSMS) и создайте пользователей автономной базы данных, сопоставленных с удостоверениями Microsoft Entra.

В следующем Transact-SQL примере добавляется удостоверение Microsoft Entra в SQL Server и предоставляется удостоверение некоторых ролей базы данных:

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

Как я могу отлаживать локально при использовании аутентификации службы приложений?

Так как проверка подлинности службы приложений является функцией Azure, код в этом руководстве не работает в локальной среде. В отличие от приложения, работающего в Azure, локальный код не выигрывает от ПО промежуточного слоя проверки подлинности службы приложений. Для локальной отладки можно использовать следующие варианты:

  • Подключитесь к базе данных SQL из локальной среды с Active Directory Interactive проверкой подлинности. Этот поток проверки подлинности не входит в систему пользователя, но подключается к внутренней базе данных с пользователем, выполнившем вход, чтобы проверить авторизацию базы данных локально.
  • Скопируйте маркер доступа вручную в код вместо заголовка X-MS-TOKEN-AAD-ACCESS-TOKEN запроса.
  • При развертывании из Visual Studio используйте удаленную отладку приложения Служба приложений.

Что происходит при истечении срока действия маркеров доступа?

Срок действия токена доступа истекает через некоторое время. Сведения об обновлении маркеров доступа без повторной проверки подлинности пользователей в приложении см. в разделе об обновлении маркеров поставщиков удостоверений.