Локальная проверка подлинности в построителе API данных
При разработке решения с помощью построителя API данных локально или при локальном запуске построителя API данных необходимо протестировать настроенные параметры проверки подлинности и авторизации, сымитировав запрос с определенной ролью или утверждением.
Для имитации запроса, прошедшего проверку подлинности, без настройки поставщика проверки подлинности (например, Microsoft Entra ID), можно использовать Simulator
поставщики проверки подлинности или StaticWebApps
:
Simulator
Использование поставщика
Simulator
— это настраиваемый поставщик проверки подлинности, который предписывает обработчику построителя API данных обрабатывать все запросы как прошедшие проверку подлинности.
- Как минимум, все запросы оцениваются в контексте системной роли
Authenticated
. - При необходимости запрос оценивается в контексте любой роли, указанной в заголовке
X-MS-API-ROLE
HTTP.
Примечание
Хотя требуемая роль будет соблюдаться, разрешения авторизации, определяющие политики базы данных, не будут работать, так как пользовательские утверждения не могут быть заданы для пользователя, прошедшего проверку подлинности, в поставщике Simulator
. Перейдите к разделу StaticWebApps
Использование поставщика для тестирования политик авторизации базы данных.
1. Обновление поставщика проверки подлинности конфигурации среды выполнения
Убедитесь, что в файле конфигурации используется поставщик проверки подлинности Simulator
и development
указан режим . Ознакомьтесь с этим примером host
раздела конфигурации:
"host": {
"mode": "development",
"authentication": {
"provider": "Simulator"
}
}
2. Укажите контекст роли запроса.
В Simulator
качестве поставщика проверки подлинности построителя API данных не требуется настраиваемый заголовок, чтобы задать контекст роли системной роли Authenticated
:
curl --request GET \
--url http://localhost:5000/api/books \
Чтобы задать для контекста роли любую другую роль, включая системную роль Anonymous
, X-MS-API-ROLE
заголовок должен быть включен в нужную роль:
curl --request GET \
--url http://localhost:5000/api/books \
--header 'X-MS-API-ROLE: author' \
StaticWebApps
Использование поставщика
Поставщик StaticWebApps
проверки подлинности указывает построителю API данных искать набор http-заголовков, которые присутствуют только при выполнении в среде Статические веб-приложения. Клиент задает эти http-заголовки при локальном запуске для имитации пользователя, прошедшего проверку подлинности, включая членство в роли или пользовательские утверждения.
Примечание
Предоставленные клиентом экземпляры заголовка HTTP будут работать только при локальной разработке, X-MS-CLIENT-PRINCIPAL
так как рабочие среды Статические веб-приложения Azure удаляют все предоставленные клиентом экземпляры этого заголовка.
Убедитесь, что в файле конфигурации используется поставщик проверки подлинности StaticWebApps
. Ознакомьтесь с этим примером host
раздела конфигурации:
"host": {
"mode": "development",
"authentication": {
"provider": "StaticWebApps"
}
}
1. Отправка запросов с помощью созданного заголовка X-MS-CLIENT-PRINCIPAL
После локального запуска построителя API данных и настройки для использования StaticWebApps
поставщика проверки подлинности можно создать объект субъекта-клиента вручную с помощью следующего шаблона:
{
"identityProvider": "test",
"userId": "12345",
"userDetails": "john@contoso.com",
"userRoles": ["author", "editor"]
}
Метаданные пользователя статического веб-приложения, прошедшие проверку подлинности , имеют следующие свойства:
Свойство | Описание |
---|---|
identityProvider | Любое строковое значение. |
userId | Уникальный идентификатор пользователя. |
userDetails | Имя или адрес электронной почты пользователя. |
userRoles | Массив назначенных пользователю ролей. |
Примечание
Как указано в документации Статические веб-приложения, X-MS-CLIENT-PRINCIPAL
заголовок не содержит claims
массив.
Чтобы передать с заголовком X-MS-CLIENT-PRINCIPAL
, полезные данные JSON должны быть в кодировке Base64. Для этого можно использовать любой сетевой или автономный инструмент. Одним из таких средств является DevToys. Пример полезных данных в кодировке Base64, представляющий json, на который ссылался ранее:
eyAgCiAgImlkZW50aXR5UHJvdmlkZXIiOiAidGVzdCIsCiAgInVzZXJJZCI6ICIxMjM0NSIsCiAgInVzZXJEZXRhaWxzIjogImpvaG5AY29udG9zby5jb20iLAogICJ1c2VyUm9sZXMiOiBbImF1dGhvciIsICJlZGl0b3IiXQp9
Следующий запрос cURL имитирует прошедший проверку пользователь, получающий список доступных Book
записей сущностей в контексте author
роли:
curl --request GET \
--url http://localhost:5000/api/books \
--header 'X-MS-API-ROLE: author' \
--header 'X-MS-CLIENT-PRINCIPAL: eyAgCiAgImlkZW50aXR5UHJvdmlkZXIiOiAidGVzdCIsCiAgInVzZXJJZCI6ICIxMjM0NSIsCiAgInVzZXJEZXRhaWxzIjogImpvaG5AY29udG9zby5jb20iLAogICJ1c2VyUm9sZXMiOiBbImF1dGhvciIsICJlZGl0b3IiXQp9'