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

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

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

В этом руководстве описано, как добавить проверку подлинности Microsoft Entra в пример веб-приложения, развернутого в одном из следующих руководств:

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

Architecture diagram for tutorial scenario.

Примечание.

Шаги, описанные в этом руководстве, поддерживаются в следующих версиях:

  • платформа .NET Framework 4.8 и более поздних версий
  • .NET 6.0 и выше

Освещаются следующие темы:

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

Примечание.

Проверка подлинности Microsoft Entra отличается от встроенной проверка подлинности Windows в локальная служба Active Directory (AD DS). AD DS и Идентификатор Microsoft Entra используют совершенно разные протоколы проверки подлинности. Дополнительные сведения см . в документации по доменным службам Microsoft Entra.

Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure, прежде чем начинать работу.

Необходимые компоненты

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

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

Подготовьте среду к работе с Azure CLI.

В Azure есть Azure Cloud Shell, интерактивная оболочка среды, с которой можно работать в браузере. Для работы со службами Azure можно использовать Bash или PowerShell с Cloud Shell. Для запуска кода из этой статьи можно использовать предварительно установленные команды Cloud Shell. Ничего дополнительного в локальной среде устанавливать не нужно.

Начало работы с Azure Cloud Shell

Вариант Пример и ссылка
Нажмите кнопку Попробовать в правом верхнем углу блока кода или команд. При нажатии кнопки Попробовать код или команда не копируется в Cloud Shell автоматически. Screenshot that shows an example of Try It for Azure Cloud Shell.
Чтобы открыть Cloud Shell в браузере, перейдите по адресу https://shell.azure.com или нажмите кнопку Запуск Cloud Shell. Button to launch Azure Cloud Shell.
Нажмите кнопку Cloud Shell в строке меню в правом верхнем углу окна портала Azure. Screenshot that shows the Cloud Shell button in the Azure portal

Чтобы использовать Azure Cloud Shell, выполните следующие действия:

  1. Запустите Cloud Shell.

  2. Нажмите кнопку Копировать в блоке кода (или блоке команд), чтобы скопировать код или команду.

  3. Вставьте код или команду в окно сеанса Cloud Shell, нажав клавиши CTRL+SHIFT+V в Windows и Linux или CMD+SHIFT+V в macOS.

  4. Нажмите клавишу ВВОД, чтобы запустить код или команду.

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

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

  1. Если у клиента Microsoft Entra еще нет пользователя, создайте его, выполнив действия по добавлению или удалению пользователей с помощью идентификатора Microsoft Entra.

  2. Найдите идентификатор объекта пользователя Microsoft Entra, используя az ad user list имя участника-пользователя и замените <его.> Результат сохраняется в переменной.

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

    Совет

    Чтобы просмотреть список всех имен субъектов-пользователей в идентификаторе Microsoft Entra ID, выполните команду az ad user list --query [].userPrincipalName.

  3. Добавьте этого пользователя Microsoft Entra в качестве администратора Active Directory с помощью az sql server ad-admin create команды в Cloud Shell. В следующей команде замените <server-name> именем сервера (без суффикса .database.windows.net).

    az sql server ad-admin create --resource-group <group-name> --server-name <server-name> --display-name ADMIN --object-id $azureaduser
    
  4. Ограничьте проверку подлинности сервера базы данных проверкой подлинности Active Directory. Этот шаг эффективно отключает проверку подлинности SQL.

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

Дополнительные сведения о добавлении администратора Active Directory см. в статье "Подготовка администратора Microsoft Entra" (База данных SQL).

2. Включение проверки подлинности пользователей для приложения

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

  1. В меню портала Azure выберите Группы ресурсов или выполните поиск по запросу Группы ресурсов на любой странице и выберите этот пункт.

  2. В группах ресурсов найдите и выберите группу ресурсов, а затем выберите свое приложение.

  3. В меню слева приложения выберите "Проверка подлинности" и выберите " Добавить поставщика удостоверений".

  4. На странице "Добавление поставщика удостоверений" выберите Корпорацию Майкрософт в качестве поставщика удостоверений для входа в удостоверения Майкрософт и Microsoft Entra.

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

    Screenshot showing the add identity provider page.

Совет

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

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

В настоящее время приложение Azure подключается к База данных SQL использует проверку подлинности SQL (имя пользователя и пароль), управляемую в качестве параметров приложения. На этом шаге вы предоставляете приложению разрешения на доступ к База данных SQL от имени пользователя Microsoft Entra, вошедшего в систему.

  1. На странице проверки подлинности приложения выберите имя приложения в разделе "Поставщик удостоверений". Эта регистрация приложения создана автоматически. В меню слева выберите Разрешения API.

  2. Выберите Добавить разрешение, а затем — Интерфейсы API, используемые моей организацией.

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

  4. На странице разрешений API запросов для База данных SQL Azure выберите делегированные разрешения и user_impersonation, а затем нажмите кнопку "Добавить разрешения".

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

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

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

В Cloud Shell выполните следующие команды в приложении, чтобы добавить scope параметр в параметр 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"

Команды эффективно добавляют loginParameters свойство с дополнительными пользовательскими область. Ниже приведено описание запрошенной области:

  • openid, profile и email уже запрошены службой приложений Azure по умолчанию. Дополнительные сведения см. в разделе Области OpenID Connect.
  • https://database.windows.net/user_impersonationссылается на База данных SQL Azure. Это область, который предоставляет токен JWT, который включает База данных SQL в качестве аудитории токенов.
  • offline_access приведен здесь для удобства (если требуется обновить маркеры).

Совет

Чтобы настроить необходимые области с помощью веб-интерфейса, см. инструкции по обновлению маркеров проверки подлинности.

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

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

Действия, которые необходимо выполнить для проекта, зависят от того, что вы используете: Entity Framework (по умолчанию для ASP.NET) или Entity Framework Core (по умолчанию для ASP.NET Core).

  1. В Visual Studio откройте консоль диспетчер пакетов и обновите Entity Framework:

    Update-Package EntityFramework
    
  2. В объекте DbContext (в Models/MyDbContext.cs) добавьте в конструктор по умолчанию следующий код.

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

Примечание.

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

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

6. Публикация изменений

  1. Если вы пришли из руководства. Создание приложения ASP.NET в Azure с помощью База данных SQL, вы настроите строка подключения в Служба приложений с помощью проверки подлинности SQL с именем пользователя и паролем. Используйте следующую команду, чтобы удалить секреты подключения, но замените имя группы, имя>> приложения, <<db-server-name> и <имя базы данных> вашими.<

    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. Публикация изменений в Visual Studio. В обозревателе решений щелкните правой кнопкой мыши проект DotNetAppSqlDb и выберите Опубликовать.

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

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

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

Azure app after Code First Migration

Теперь вы должны иметь возможность редактировать список дел по-прежнему.

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

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

az group delete --name <group-name>

Ее выполнение может занять до минуты.

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

Почему возникает Login failed for user '<token-identified principal>'. ошибка?

Наиболее распространенными причинами этой ошибки являются:

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

  1. Подключение на сервер базы данных, например с sqlcmd или SSMS.

  2. Создание содержащихся пользователей, сопоставленных с удостоверениями Microsoft Entra, в База данных SQL документации.

    Следующий пример 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 Поток проверки подлинности не входит в приложение, но подключается к внутренней базе данных с пользователем, выполнившем вход, и позволяет проверить авторизацию базы данных локально.
  • Скопируйте маркер доступа вручную в https://<app-name>.azurewebsites.net/.auth/me код вместо заголовка X-MS-TOKEN-AAD-ACCESS-TOKEN запроса.
  • При развертывании из Visual Studio используйте удаленную отладку приложения Служба приложений.

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

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

Следующие шаги

Вы научились выполнять следующие задачи:

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