Использование API-интерфейса REST Azure Service Management в качестве зарегистрированного приложения Active Directory - PullRequest
0 голосов
/ 17 октября 2019

У нас есть приложение, которое обращается к API-интерфейсу управления службами Azure (management.azure.com) для автоматической загрузки определений API в API-управлении.

В качестве метода проверки подлинности мы создали «Регистрация приложения» в Azure Active. Справочник и присвоенный секрет. Поэтому мы используем идентификатор клиента и секрет этого приложения. Этот метод описан здесь:

https://docs.microsoft.com/en-us/azure/active-directory/develop/scenario-daemon-overview

Токен получен с использованием MSAL:

private static async Task<string> GetAccesToken(AzureADApplicationCredentials adApplicationCredentials)
{
    var scopes = new string[] { @"https://management.azure.com/.default" };

    var app = Microsoft.Identity.Client.ConfidentialClientApplicationBuilder
       .Create(adApplicationCredentials.ClientId)
       .WithClientSecret(adApplicationCredentials.Secret)
       .WithAuthority(new Uri($"https://login.microsoftonline.com/{adApplicationCredentials.DirectoryId}"))
       .Build();

    var result = await app.AcquireTokenForClient(scopes).ExecuteAsync();

    return result?.AccessToken;
}

Используя эту аутентификацию, мы можем успешно получить список API,но вызов для добавления API к службе завершается неудачно со следующей ошибкой:

{
    "error": {
        "code": "AuthorizationFailed",
        "message": "The client 'f42...' with object id 'f42...' does not have authorization to perform action 'Microsoft.ApiManagement/service/apis/write' over scope '/subscriptions/27e.../resourceGroups/OurResouceName/providers/Microsoft.ApiManagement/service/OurServiceName/apis/7c6...' or the scope is invalid. If access was recently granted, please refresh your credentials."
    }
}

Что я пробовал:

  • Я заметил, что могу назначить разрешения в "Раздел «Разрешения API» регистрации приложения, но я могу назначить только разрешение «user_impersonation» для «Azure Service Management», которое, на мой взгляд, не нужно в моем сценарии.
  • Я использую https://management.azure.com/.default Объем, как предлагается в документации. Я думаю, что я должен быть в состоянии передать в другой области, чем .default, но я не могу найти дополнительную информацию по этому вопросу. Я сталкивался с этой страницей, на которой перечислены все разрешения: https://docs.microsoft.com/en-us/azure/role-based-access-control/resource-provider-operations#microsoftapimanagement Я пытался использовать там значения в качестве областей (Microsoft.ApiManagement / service / apis / write и т. Д.) Безрезультатно.

Есть мысли о том, как я могу сделать эту работу?

1 Ответ

1 голос
/ 17 октября 2019

Исходя из вашего описания, причина, по которой вы сталкиваетесь, связана с ошибкой, потому что ваше приложение Azure AD не имеет разрешения на запись в вашей области APIM, кажется, оно имеет только разрешение на чтение.

Я могу воспроизвести вашу проблему, пока регистрирую новое приложение Azure AD без разрешения.

Чтобы решить эту проблему, просто перейдите в APIM, нажмите «Контроль доступа (IAM)» и нажмите «Добавить», чтобы назначить роль с разрешением на запись для приложения Azure AD, например «Автор», сохранитеи получить новый токен доступа решит эту проблему. enter image description here

Дополнительные сведения об управлении доступом Azure см. В этом руководстве . Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...