API безопасности Azure REST - PullRequest
0 голосов
/ 23 мая 2018

Я ищу такую ​​функцию, как мудрые роли / политики AAD для конкретных API в API Management Service.

AWS предлагает управление доступом на основе правил.Например, мы можем назначить определенный доступ API (API-шлюза) конкретному пользователю IAM с помощью роли / политик.

Предлагает ли Azure такую ​​службу?Например, я добавил 20 API (5 GET + 5 POST + 5 PUT + 5 DELETE) в службе управления API Azure.Могу ли я назначить конкретный метод (например, GET) API-доступ для конкретного пользователя?

1 Ответ

0 голосов
/ 24 мая 2018

Одним из способов достижения этого (без кода, просто настройка) является использование ролей приложений 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

Сценарий 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...