Одним из способов достижения этого (без кода, просто настройка) является использование ролей приложений Azure Active Directory (AAD).
Сначала необходимо создать приложение AAD, представляющее ваш веб-API.Перейдите в AAD> Регистрация приложений и зарегистрируйте там Web App / Web API.Затем отредактируйте его манифест, добавив роль, например:
"appRoles": [
{
"allowedMemberTypes": [
"Application",
"User"
],
"displayName": "Allow HTTP GET",
"id": "9cc5ee71-3d7d-4060-8b7f-e734f3917e71",
"isEnabled": true,
"description": "Allow HTTP GET requests",
"value": "AllowGET"
}
],
Вы можете добавить разные роли для различных методов, которые есть у вашего API.
Затем перейдите в AAD> Корпоративные приложения, найдите приложениеВы только что создали и:
- В Свойства выберите «Требуется назначение пользователя»> Да
- В Пользователи иГруппы , добавьте пользователей, которым вы хотите разрешить доступ к роли, которую вы создали ранее («Разрешить HTTP Get»).
Теперь перейдите в службу управления API> API> найдите свой API / Метод и редактировать Входящая обработка .В разделе Code View добавьте политику ValidateJWT для проверки токенов AAD (убедитесь, что вы настроили имя своего клиента AAD и настроили GUID аудитории, который является идентификатором приложения вашего Web API (тот, который вы зарегистрировали в AAD в начале):
<validate-jwt header-name="Authorization" failed-validation-httpcode="401" failed-validation-error-message="Unauthorized. Access token is missing or invalid.">
<openid-config url="https://login.microsoftonline.com/TENANT.onmicrosoft.com/.well-known/openid-configuration" />
<audiences>
<audience>53a81160-e4c9-40ba-aeef-6bb99ad6b4b3</audience>
</audiences>
<required-claims>
<claim name="roles" match="all">
<value>AllowGET</value>
</claim>
</required-claims>
</validate-jwt>
Обратите внимание, что под required-претензий указано утверждение роли ( AllowGET ), которое вы настроили ранее,в манифесте приложения.
Теперь вы можете выполнить тестирование. Если вы хотите провести тестирование через консоль разработчика APIM, следуйте приведенным здесь инструкциям Защита API с помощью OAuth 2.0 с Azure Active Directory и управлением API .
Или вы также можете выполнить тестирование, просто используя простой скрипт PowerShell, как показано ниже. Если вы используете этот скрипт, сначала вам нужно зарегистрировать другое приложение AAD, на этот раз представляющее скрипт («собственный клиент»)."). Перейдите в раздел AAD> Регистрация приложений и зарегистрируйте собственный клиент. В разделе Настройки> Разрешения добавьте делегированное разрешение, чтобы это приложениеКатион может вызывать Web API:
![enter image description here](https://i.stack.imgur.com/MATgU.jpg)
Сценарий PowerShell: (просмотрите код и убедитесь, что вы заменили параметры и URL вашего API, идобавить путь к библиотеке ADAL «Microsoft.IdentityModel.Clients.ActiveDirectory.dll», которая используется для упрощения получения токена)
add-type -path "Microsoft.IdentityModel.Clients.ActiveDirectory.dll"
$clientId = "NATIVE APPLICATION AAD AAP ID"
$redirectUri = "http://NATIVE APPLICATION AAD REDIRECT URI"
$resourceAppIdURI = "WEB API APP ID"
$authority = "https://login.windows.net/TENANT.onmicrosoft.com"
$authContext = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext" -ArgumentList $authority,$false
$promptBehavior=new-object Microsoft.IdentityModel.Clients.ActiveDirectory.PlatformParameters([Microsoft.IdentityModel.Clients.ActiveDirectory.PromptBehavior]::Always)
$userId = [Microsoft.IdentityModel.Clients.ActiveDirectory.UserIdentifier]::AnyUser
$authResult = $authContext.AcquireTokenAsync($resourceAppIdURI, $clientId, $redirectUri, $promptBehavior, $userId, $extraQueryParameters)
$authHeader = @{
'Accept'='application/json'
'Content-Type'='application/json'
'Authorization'=$authResult.result.CreateAuthorizationHeader()
'Ocp-Apim-Subscription-Key'='APIM SUBSCRIPTION KEY'
'Ocp-Apim-Trace'='true'
}
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-RestMethod -Uri "https://yourapimanager.azure-api.net/posts" -Headers $authHeader -Method Get -Verbose