Аутентифицировать пакет управления Azure в .NET Core? - PullRequest
0 голосов
/ 14 октября 2019

Я использую приложение ASP.NET Core (.Net Core 3.0) и ссылаюсь на пакет nuGet Microsoft.Azure.Management.WebSites. Кажется, что есть полдюжины способов подключения к Azure, и я надеюсь, что это правильный способ для моей среды.

Я пытаюсь создать экземпляр WebSiteManagementClient, чтобы я мог изменить некоторые AppService настроек (масштаб сервисного плана вверх / вниз). Для этого мне нужен экземпляр ServiceClientCredentials. Кажется, я не могу найти способ собрать правильные учетные данные.

Я следил за несколькими разными статьями, все они защищают другой метод.

Какой самый простой способ пройти проверку подлинности с помощью Azure Management SDK?

В идеале избегать Azure Active Directory. Я несколько раз пытался настроить регистрацию приложения с соответствующими разрешениями, и я не могу собрать ее.

Приложение, подключающееся и вносящее изменения, будет веб-сайтом ASP.NET, работающим в самом Azure, если это что-то меняет.

Заранее спасибо!

Код пока:

  using Microsoft.Azure.Management.WebSites;

  var credentials = await GetCredentials();  // <-- ???
  WebSiteManagementClient client = new WebSiteManagementClient(credentials);
  client.SubscriptionId = "xxx-xxx-xxxx-xxxx";

1 Ответ

0 голосов
/ 15 октября 2019

Попробуйте:

static void Main(string[] args)
{
    string tenantId = "<your tenant ID>";
    string clientId = "<your azure ad app ID>";
    string clientSecret = "<azure ad app secret>";
    string subscriptionId = "<your subscription ID>";


    WebSiteManagementClient client = new WebSiteManagementClient(GetCredsFromServicePrincipal(tenantId, clientId, clientSecret));
    client.SubscriptionId = subscriptionId;

    foreach (var ap in client.app.List()) {
        Console.WriteLine(ap.Id);
    }

}


private static TokenCredentials GetCredsFromServicePrincipal(String tenantId,String clientId, String clientSecret)
{
    var authority = @"https://login.microsoftonline.com/" + tenantId;
    var authContext = new AuthenticationContext(authority);
    var credential = new ClientCredential(clientId, clientSecret);
    var authResult = authContext.AcquireTokenAsync("https://management.azure.com", credential).GetAwaiter().GetResult();
    return new TokenCredentials(authResult.AccessToken);
}

Результат (перечислите все идентификаторы веб-сайтов): enter image description here В этом примере используйте ServicePrincipal для доступа к ресурсам веб-сайта Azure, поэтому вам следует предоставить соответствующие разрешения. это в вашей подписке «Контроль доступа (IAM)», например, назначение ему «участник веб-сайта» и «участник веб-плана», чтобы у него было разрешение на управление ресурсами вашего сайта. Надеюсь, это поможет.

...