Эквиваленты Login-AzureRmAccount (и связанные) в .NET Azure SDK

Я стал задаваться вопросом, что могли бы эквиваленты

  • Логин — AzureRmAccount
  • New-AzureRmADServicePrincipal
  • New-AzureRmADApplication

в Azure SDK для .NET. По какой-то причине я не могу найти их, и я хотел бы сделать что-то вроде в этом сообщении блога, но в коде.

‹редактировать: 2017-06-20 00:42

Взяв некоторые подсказки от Тома Сана и углубившись в это, я нашел ответ, который частично решает проблему «старых библиотек», а также проблему первоначального выбора подписки. Это описано в https://stackoverflow.com/a/41360632/1332416, но этот код уже немного устарел. , и немного дальше, есть переписывание этого в немного более новой форме по адресу https://stackoverflow.com/a/38036598/1332416. Однако это еще не совсем так, я продолжаю тыкать немного дальше (если кто-то не ткнет дальше). Я думаю, что я неточно перефразировал исходный вопрос. Я хотел бы воссоздать «обычный процесс входа в систему с помощью PowerShell», но на этот раз в коде. Однако эти команды PS немного грубы для определения. :)

Часть о выборе подписки с помощью PowerShell может быть такой: $subscription = Get-AzureRmSubscription | Out-GridView -Title "Select the subsbcription for the deployment" -PassThru Select-AzureRmSubscription -SubscriptionId $subscription.SubscriptionId


person Veksi    schedule 18.06.2017    source источник


Ответы (1)


Из исходного кода библиотек управления Azure для .NET я не удалось найти создание AD ServicePrincipal и функцию Azure AD. После некоторого исследования я обнаружил, что мы можем сделать это с помощью Microsoft.Azure.ActiveDirectory. GraphClient SDK. Делаю тестовую демку, на моей стороне работает корректно. Ниже приведены мои подробные шаги:

Подготовка:

1. Нам нужно создать собственное приложение AD на портале Azure.

введите здесь описание изображения

  1. Назначьте делегированные разрешения Доступ к каталогу в качестве вошедшего пользователя.

введите здесь описание изображения

  1. Мы могли бы получить наш идентификатор арендатора, который представляет собой информацию Directory на скриншоте портала.

введите здесь описание изображения

Шаги:

1. Создайте консольный проект C#.

2. См. Microsoft.Azure.ActiveDirectory.GraphClient SDK, более подробную информацию см. в разделе packages.config.

3.Добавьте в проект следующий код.

 public static async Task<string> GetAccessToken(string userName, string password)
        {
            var tokenResponse = await context.AcquireTokenAsync("https://graph.windows.net", appId, new UserCredential(userName, password));
            var accessToken = tokenResponse.AccessToken;
            return accessToken;
        }

    static string appId = "created AD Application Id";
    static string tenantId = "tenant Id";
    static string graphResourceId = "https://graph.windows.net";
    static string username = "user name";
    static string userPasswrod = "passowrd";
    static void Main(string[] args)
    {

        Uri servicePointUri = new Uri(graphResourceId);
        Uri serviceRoot = new Uri(servicePointUri, tenantId);
        ActiveDirectoryClient activeDirectoryClient = new ActiveDirectoryClient(serviceRoot, async () => await GetAccessToken(username, userPasswrod));
        Application application = new Application
        {  
            Homepage = "http://localhost:13526/",
            DisplayName = "tomnewapplication",
            IdentifierUris = new List<string> { "http://localhost/abcde" }
        };

     //Create Azure Directory Application   
     activeDirectoryClient.Applications.AddApplicationAsync(application).Wait();
        ServicePrincipal servicePrincipal = new ServicePrincipal
        {
            AppId = "existing AD application Id"
        };
     //Create service principal 
       activeDirectoryClient.ServicePrincipals.AddServicePrincipalAsync(servicePrincipal).Wait();
    }

4. Проверка на лазурном портале

введите здесь описание изображения

файл packages.config

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Microsoft.Azure.ActiveDirectory.GraphClient" version="2.1.1" targetFramework="net452" />
  <package id="Microsoft.Data.Edm" version="5.6.4" targetFramework="net452" />
  <package id="Microsoft.Data.OData" version="5.6.4" targetFramework="net452" />
  <package id="Microsoft.Data.Services.Client" version="5.6.4" targetFramework="net452" />
  <package id="Microsoft.Graph" version="1.2.0" targetFramework="net452" />
  <package id="Microsoft.Graph.Core" version="1.3.0" targetFramework="net452" />
  <package id="Microsoft.IdentityModel.Clients.ActiveDirectory" version="2.28.3" targetFramework="net452" />
  <package id="Newtonsoft.Json" version="6.0.1" targetFramework="net452" />
  <package id="System.Spatial" version="5.6.4" targetFramework="net452" />
</packages>
person Tom Sun - MSFT    schedule 19.06.2017
comment
Хм, интересно. Интересно, обновляется ли эта библиотека. Однако хорошие моменты, я вернусь к компьютеру через несколько часов, позвольте мне немного поиграть с этим. Идентификатор арендатора, вероятно, может быть запрошен как использование Get-AzureRmSubscription, а затем выбор одного, но, возможно, он также будет использовать этот немного не обновленный пакет Nuget... Похоже, переход на nuget.org/packages/Microsoft.Graph.. :) - person Veksi; 19.06.2017
comment
Я обновил ответ, чтобы добавить информацию о пакетах. Попробуйте использовать Microsoft.Azure.ActiveDirectory.GraphClient SDK, а не Microsoft.Graph SDK. - person Tom Sun - MSFT; 19.06.2017
comment
Я ценю трудности, через которые вы уже прошли. Я немного не решаюсь принять ответ, хотя и хороший, поскольку библиотеки устарели, и хотя я вижу, что не предоставил командлет PS о выборе подписки, он оказывается таким же проблематичным, как и другие в стандартном потоке при переводе в код С#. Я обновил вопрос, добавив еще несколько исследований, я планирую углубиться в это. Если ничего не выйдет, я приму это (завтра, наверное). - person Veksi; 20.06.2017
comment
С этим все в порядке, я копаю немного глубже и, возможно, опубликую новый, лучше сформулированный вопрос, если у меня будет еще немного времени, чтобы копаться в этом. Спасибо за беспокойство! - person Veksi; 20.06.2017
comment
Эй, я пытаюсь использовать библиотеку Azure RM .Net, для аутентификации которой требуется объект AzureCredential. Мне было интересно, можно ли как-то сгенерировать это без создания приложения Azure AD и просто передав имя пользователя и пароль (аналогично Connect-AzureRmAccount). - person Hari Govind; 03.04.2018
comment
@HariGovind Вы можете попробовать следующий код var credentials =new AzureCredentials(new UserLoginInformation { ClientId = "Azure client Id",UserName = "username",Password = "Password"}, "tenant Id", AzureEnvironment.AzureGlobalCloud); //AzureChinaCloud,AzureGermanCloud,AzureUSGovernment. По-прежнему необходимо создать приложение Azure AD. - person Tom Sun - MSFT; 04.04.2018
comment
Спасибо @TomSun, я попробовал этот код, и он отлично работает, но мне было интересно, можно ли это сделать без приложения Azure AD? - person Hari Govind; 04.04.2018
comment
@HariGovind Исходя из моего опыта, требуется приложение Azure AD. - person Tom Sun - MSFT; 04.04.2018
comment
Спасибо @TomSun, я тоже думал об этом. - person Hari Govind; 04.04.2018
comment
@TomSun Мне было интересно, есть ли способ выполнить powershell Azure RM через C # и, возможно, получить результаты. - person Hari Govind; 04.04.2018
comment
Могу я узнать, почему приложение Azure AD неприемлемо для вас? - person Tom Sun - MSFT; 04.04.2018
comment
почему нам нужно создать собственное приложение AD для создания нового приложения - person Balasubramaniam; 21.09.2018