Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этом руководстве показано, как подключить приложение Службы приложений 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 не поддерживается для локального SQL Server.
- Проверка подлинности Microsoft Entra отличается от встроенной проверки подлинности Windows в локальных доменных службах Active Directory (AD). AD DS и Идентификатор Microsoft Entra используют совершенно разные протоколы проверки подлинности. Для получения дополнительной информации см. документацию по доменным службам Microsoft Entra.
Необходимые условия
Доступ к клиенту Microsoft Entra, заполненным пользователями и группами.
Ознакомьтесь с руководством по созданию приложения ASP.NET Core и Базы данных SQL в Службе приложений Azure и используйте готовое приложение для этого руководства.
Кроме того, адаптируйте шаги и используйте собственное приложение .NET с базой данных SQL. Действия, описанные в этом руководстве, поддерживают следующие версии .NET:
- .NET Framework 4.8 и более поздних версий
- .NET 6.0 и более поздних версий
Войдите в Azure Cloud Shell или подготовьте среду для использования Azure CLI.
Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см. в статье "Начало работы с Azure Cloud Shell".
Если вы предпочитаете запускать справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, подумайте о запуске Azure CLI в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.
Если вы используете локальную установку, войдите в Azure CLI с помощью команды az login . Чтобы завершить процесс аутентификации, следуйте шагам, отображаемым в вашем терминале. Сведения о других параметрах входа см. в статье "Проверка подлинности в Azure с помощью Azure CLI".
Когда вас попросят, установите расширение Azure CLI при первом использовании. Дополнительные сведения о расширениях см. в статье Использование расширений и управление ими с помощью Azure CLI.
Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.
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.
Используйте
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.Добавьте пользователя 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>Ограничить проверку подлинности сервера базы данных только проверкой подлинности Microsoft Entra. Этот шаг отключает проверку подлинности имени пользователя и пароля SQL.
az sql server ad-only-auth enable --resource-group <group-name> --name <server-name>
- Дополнительные сведения о создании пользователя Microsoft Entra см. в разделе "Добавление или удаление пользователей с помощью идентификатора Microsoft Entra".
- Дополнительные сведения о разрешенных пользователях Microsoft Entra для базы данных SQL см. в разделе о функциях и ограничениях Microsoft Entra в базе данных SQL.
- Дополнительные сведения о добавлении администратора SQL Server Azure см. в статье "Подготовка администратора Microsoft Entra для сервера".
2. Включение проверки подлинности идентификатора Microsoft Entra для приложения
Добавьте идентификатор Microsoft Entra в качестве поставщика удостоверений для приложения. Дополнительные сведения см. в разделе "Настройка аутентификации Microsoft Entra для приложения службы приложений".
На странице портала Azure для приложения выберите "Проверка подлинности " в разделе "Параметры" в меню навигации слева.
На странице проверки подлинности выберите "Добавить поставщика удостоверений" или выберите "Добавить поставщика " в разделе "Поставщик удостоверений ".
На странице "Добавление поставщика удостоверений" выберите Майкрософт в качестве поставщика.
Для истечения срока действия секрета клиента выберите один из вариантов раскрывающегося списка, например рекомендуемые: 180 дней.
Сохраните все параметры по умолчанию и нажмите кнопку "Добавить".
Примечание.
При перенастройке параметров проверки подлинности приложения маркеры в хранилище маркеров могут не повторно создаваться из новых параметров. Чтобы убедиться, что маркеры повторно создаются, выйдите и войдите в приложение. Простой способ — использовать браузер в частном режиме. Закройте и снова откройте браузер в частном режиме после изменения параметров в приложениях.
3. Настройка олицетворения пользователя базы данных SQL
Предоставьте приложению разрешения на доступ к базе данных SQL от имени пользователя Microsoft Entra, вошедшего в систему.
На странице проверки подлинности приложения выберите имя приложения в разделе "Поставщик удостоверений".
Откроется страница регистрации приложения. Эта регистрация была автоматически создана при добавлении поставщика Microsoft Entra.
Выберите разрешения APIв меню навигации слева.
На странице разрешений API нажмите кнопку "Добавить разрешение".
На экране разрешений API запроса выберите API, которые используются в моей организации .
Введите базу данных SQL Azure в поле поиска и выберите результат.
В разделе "Какой тип разрешений требуется приложение", выберите делегированные разрешения, а затем установите флажок рядом с 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. Используйте маркер доступа в коде приложения
Обновите код приложения, чтобы добавить маркер доступа, предоставленный проверкой подлинности службы приложений, в объект подключения.
Примечание.
Этот код не работает локально. Дополнительные сведения и альтернативные варианты для локальной отладки см. в разделе "Отладка локально" при использовании проверки подлинности службы приложений.
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"]; }Если у вас есть строка подключения, вызываемая
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:
Щелкните проект правой кнопкой мыши в обозревателе решений и выберите "Опубликовать".
На странице публикации выберите "Опубликовать".
Когда на новой странице приложения отображается приложение, приложение подключается к базе данных SQL Azure от имени пользователя Microsoft Entra, вошедшего в систему. Вы должны иметь возможность использовать и изменять приложение как обычно.
7. Очистка ресурсов
На предыдущем шаге вы создали ресурсы Azure в группе ресурсов. Если эти ресурсы больше не нужны, удалите группу ресурсов, выполнив следующую команду:
az group delete --name <group-name>
Эта команда может занять некоторое время для выполнения.
Часто задаваемые вопросы
- Почему возникает ошибка входа для пользователя "<определяемый токеном субъект>"?
- Как добавить других пользователей или группы Microsoft Entra в базу данных Azure SQL?
- Как отлаживать локально при использовании аутентификации службы приложений?
- Что происходит при истечении срока действия маркеров доступа?
Почему возникает ошибка входа для пользователя "<определяемый токеном субъект>"?
Наиболее распространенными причинами Login failed for user '<token-identified principal>' ошибки являются:
- Проверка подлинности Microsoft Entra не настроена для базы данных SQL Azure. См. статью "Настройка сервера базы данных с проверкой подлинности Microsoft Entra".
- Недопустимый маркер в заголовке
X-MS-TOKEN-AAD-ACCESS-TOKENзапроса. Этот код не работает в локальных средах. Дополнительные сведения и альтернативные варианты см. в разделе "Отладка локально" при использовании проверки подлинности службы приложений. - У пользователя нет разрешения на подключение к базе данных. Сведения о добавлении пользователей и разрешений см. в статье "Добавление других пользователей или групп Microsoft Entra" в Базе данных SQL Azure.
Как добавить других пользователей или группы 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 используйте удаленную отладку приложения Служба приложений.
Что происходит при истечении срока действия маркеров доступа?
Срок действия токена доступа истекает через некоторое время. Сведения об обновлении маркеров доступа без повторной проверки подлинности пользователей в приложении см. в разделе об обновлении маркеров поставщиков удостоверений.
Связанный контент
- Учебник. Подключение к базам данных Azure из Службы приложений без секретов с помощью управляемого удостоверения
- Руководство. Доступ к Microsoft Graph из защищенного приложения .NET в качестве приложения
- Руководство: изолирование взаимодействия между внутренними сетями посредством интеграции виртуальной сети
- Сопоставление существующего настраиваемого DNS-имени со Службой приложений Azure