Как зарегистрировать приложение в Azure AD для моих клиентов, используя учетные данные глобального администратора CSP?

Моя цель — создать приложение в Azure Active Directory для моих клиентов с помощью учетной записи глобального администратора CSP с помощью C#.

Поскольку он работает через команды PowerShell.

Login-AzureRmAccount ==> CSP Global admin credentials
Select-AzureRmSubscription -TenantId "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx(Enter your Customer Microsoft ID)" ==> Select a tenant where I want to create application
$password = ConvertTo-SecureString "SomePass@123" -asplaintext -force
New-AzureRmADApplication -DisplayName "MyApp" -HomePage "http://MyApp" -IdentifierUris "http://MyApp" -Password $password ==> Application created in the above mentioned tenants account.


Пожалуйста, помогите мне сделать то же самое на С#.

Взгляните и дайте мне знать, если у вас есть еще вопросы. Спасибо

Md Farid Uddin Kiron 12.04.2019 05:09

Я написал для вас пример кода. Пожалуйста, чек.

Md Farid Uddin Kiron 16.04.2019 09:20
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
2
240
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать Бета-версия API Microsoft Graph для создания нового приложения на портале Azure.

Note One of the following permissions is required to call this API. To learn more, including how to choose permissions, see Permissions. see the screen shot below

Формат запроса

https://graph.microsoft.com/beta/applications

Обновлять:

Я пробовал так:

Запрос от Проводник Microsoft Graph

Установите тело запроса, как показано ниже.

{
  "displayName": "Your Application Name"
}

См. снимок экрана ниже

Портал Azure:

После успешного ответа проверьте на лазурном портале

Point to remember

If you tried with Microsoft Graph Explorer must set below permission.

См. снимок экрана ниже

Для получения дополнительной информации вы можете проверить здесь

Note: APIs under the /beta version in Microsoft Graph are subject to change. Use of these APIs in production applications is not supported.

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

mohammed zaid 10.04.2019 12:50

Позвольте мне проверить учетную запись партнера, а затем я обновлю свой ответ. Я пробовал с Microsoft Graph Explorer, который отлично работает для меня. developer.microsoft.com/en-us/graph/graph-explorer

Md Farid Uddin Kiron 11.04.2019 08:08

Благодарю за ваш ответ. Будем рады услышать от вас.

mohammed zaid 12.04.2019 07:41

@mohammedzaid Я обновил ответ. вы можете попробовать сейчас. Этот пример я сделал с партнерской учетной записью с учетными данными администратора. проверьте пример.

Md Farid Uddin Kiron 12.04.2019 07:48

Я думаю, вы не поняли мой вопрос. Я хочу зарегистрировать приложение в учетной записи арендатора (клиента) моего партнерского центра Страница клиента. Этот URL-адрес будет содержать список всех арендаторов (клиентов). Используя их идентификатор и учетные данные администратора Центра партнеров, я смогу зарегистрировать приложение в их Azure AD, как я могу сделать с помощью приведенного выше сценария PowerShell. жду Вашего ответа

mohammed zaid 15.04.2019 07:26

@mohammedzaid Вы имели в виду, что хотите создать арендатора partner.microsoft.com/en-us/dashboard/account/v3/… в активном каталоге Azure?

Md Farid Uddin Kiron 15.04.2019 07:36

Нет, в Страница клиента выберите клиента, перейдите к Управление услугами и щелкните Azure Active Directory, вы будете перенаправлены в Azure AD вашего клиента, где вы можете создавать приложения, пользователей, группы от имени клиентов. Здесь я просто хочу создать приложение. То же самое я хочу добиться программно от С#. Вы можете выполнить приведенный выше сценарий PowerShell, чтобы понять мои требования и проверить, будет ли создано приложение Azure AD вашего клиента.

mohammed zaid 15.04.2019 09:25

Не могли бы вы попробовать фрагмент кода. Я протестировал на своей стороне, и он сделал то же самое, что и сценарий PS.

Md Farid Uddin Kiron 17.04.2019 05:15
Ответ принят как подходящий
    public static string postRequest(string url, string access_token, string data)
    {
        byte[] buffer = null;
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        request.Method = "post";
        request.ContentType = "application/json";
        request.Headers.Add("Authorization", "Bearer " + access_token);
        //request.Headers.Add("other header", "it's value");
        if (data != null)
            buffer = Encoding.UTF8.GetBytes(data);
        else
            buffer = Encoding.UTF8.GetBytes("");
        request.ContentLength = buffer.Length;
        request.GetRequestStream().Write(buffer, 0, buffer.Length);
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8))
        {
            return response.StatusCode + " " + reader.ReadToEnd();
        }
    }


    public class PasswordCredential
    {
        public string startDate;
        public string endDate;
        public string keyId;
        public string value;
    }

    public class AppConfiguration
    {
        public bool availableToOtherTenants;
        public string displayName;
        public string homepage;
        public List<string> identifierUris = new List<string>();
        public List<PasswordCredential> passwordCredentials = new List<PasswordCredential>();
    }

    static void Main(string[] args)
    {
        string tenantId = @"customer tenant id";
        string resource = @"https://graph.windows.net/";
        string clientId = @"1950a258-227b-4e31-a9cf-717495945fc2";
        string returnUri = @"urn:ietf:wg:oauth:2.0:oob";

        var context = new AuthenticationContext("https://login.microsoftonline.com/" + tenantId);

        var uri = new Uri(returnUri);
        var platformParams = new PlatformParameters(PromptBehavior.Always);
        var authResult = context.AcquireTokenAsync(resource, clientId, uri, platformParams).Result;
        var accessToken = authResult.AccessToken;

        var url = @"https://graph.windows.net/{customer_tenant_id}/applications?api-version=1.6";

        var passwordCredential = new PasswordCredential();
        passwordCredential.startDate = DateTime.UtcNow.ToString("yyyy-MM-ddThh:mm:ssZ");
        passwordCredential.endDate = DateTime.UtcNow.AddYears(1).ToString("yyyy-MM-ddThh:mm:ssZ");
        passwordCredential.keyId = Guid.NewGuid().ToString();
        passwordCredential.value = "TestPassword1.";

        var appConfiguration = new AppConfiguration();
        appConfiguration.availableToOtherTenants = false;
        appConfiguration.displayName = "MyApp";
        appConfiguration.homepage = "Https://MyApp";
        appConfiguration.identifierUris.Add("https://MyApp");
        appConfiguration.passwordCredentials.Add(passwordCredential);

        var body = JsonConvert.SerializeObject(appConfiguration);
        //Console.WriteLine(body);

        var result = postRequest(url, accessToken, body);
        Console.WriteLine(result);

        Console.ReadLine();
    }

Я быстро создал для вас пример с помощью ADAL, Newtonsoft.Json и HttpWebRequest. Вы можете сначала попробовать этот фрагмент кода.

Update: It is not suggested to hardcode your username and password. If you enable MFA, you may not able to get a token. If MFA is disabled, you can try with the follwoing code snippet:

    string userName = @"[email protected]";
    string passWord = @"password";

    var context = new AuthenticationContext("https://login.microsoftonline.com/tenant_id");

    result = context.AcquireTokenAsync(
          resource,
          clientid,
          new UserPasswordCredential(userName, passWord)).Result;

Спасибо, это именно то, что мне нужно, но как я могу жестко закодировать свое имя пользователя и пароль, чтобы избежать этого Запрос на вход в Microsoft

mohammed zaid 17.04.2019 07:33

Не рекомендуется жестко кодировать имя пользователя и пароль. И если MFA включен, вы не сможете успешно получить токен.

Md Farid Uddin Kiron 17.04.2019 13:09

Поскольку существует несколько учетных записей CSP, я буду передавать имя пользователя и пароль динамически. и MFA также отключен во всех учетных записях. Поэтому я хочу, чтобы это было жестко закодировано, пожалуйста, помогите мне достичь этого.

mohammed zaid 17.04.2019 13:46

@mohammedzaid Пожалуйста, проверьте часть ответа об обновлении, где я объяснил, как вы можете сделать это жестко запрограммированным. Спасибо

Md Farid Uddin Kiron 18.04.2019 08:41

Упомянутый идентификатор клиента string clientId = @"1950a258-227b-4e31-a9cf-717495945fc2"; является глобальным для всех, потому что у меня нет приложений, зарегистрированных этим идентификатором клиента, просто небольшое сомнение. Ваша готовность помочь везде, где это необходимо, очень ценится. Спасибо

mohammed zaid 18.04.2019 11:39

@mohammedzaid Рад слышать, что добро пожаловать, удачного кодирования :)

Md Farid Uddin Kiron 18.04.2019 11:55

@mohammedzaid Да, это глобально для всех.

Md Farid Uddin Kiron 19.04.2019 07:30

Благодарю вас за информацию:)

mohammed zaid 23.04.2019 15:24

Другие вопросы по теме