Как получить доступ ко всем клиентам и подпискам с помощью единого входа в Azure Management SDK - PullRequest
0 голосов
/ 29 октября 2019

Я пытаюсь использовать https://github.com/Azure/azure-libraries-for-net для проверки подлинности в Azure из приложения командной строки. Моя цель - перечислить все учетные записи хранения во всех арендаторах и во всех подписках, используя текущие библиотеки, но безуспешно.

FromDevice метод действительно работает хорошо, если я использую common в качестве идентификатора арендатора:

AzureCredentials credentials = SdkContext.AzureCredentialsFactory.FromDevice(
    AzureCliClientId,
    "common",
    AzureEnvironment.AzureGlobalCloud,
    code =>
    {
        Console.WriteLine(code.Message);
        return true;
    });

IAuthenticated authenticatedAzure = Azure.Authenticate(azureNativeCreds);

однако любой вызов auth.Subscriptions.ListAsync возвращает пустой список подписок для любой учетной записи, которая имеет доступ к более чем одному арендатору или к нескольким подпискам.

Я могу перечислить арендаторов, которым принадлежит пользователь, с помощью auth.Tenants.ListAsync(), и это возвращает действительный список арендаторов, однако я не могу найти способ использовать конкретного арендатора и подписку для последующего вызова.

Один из способов добиться того, чего я хочу, - создать другой экземпляриз IAzure, но снова появляется диалоговое окно аутентификации, то есть:

foreach(var tenant in await authenticatedAzure.Tenants.ListAsync())
{
    //create creds for tenant?
    //throws authentication dialog for every tenant

    var tenantCredentials = SdkContext.AzureCredentialsFactory.FromDevice(
        AzureCliClientId,
        tenant.TenantId,
        AzureEnvironment.AzureGlobalCloud,
        code =>
        {
            Console.WriteLine(code.Message);
            return true;
        });

  IAzure tenantAzure = await Azure.Authenticate(tcreds).WithDefaultSubscriptionAsync();

  var storageAccounts = await tenantAzure.StorageAccounts.ListAsync();
}

, так что пользователя постоянно раздражают всплывающие окна. Другая проблема, которая FromDevice не будет помнить, что пользователь уже вошел в систему ранее, независимо от того, сохраняю ли я кеш токена на диск или нет (TokenCache.DefaultShared.BeforeWrite и т. Д.).

...