Как зарегистрировать приложение в Azure AD для моих клиентов, используя учетные данные CSP Global Admin? - PullRequest
2 голосов
/ 10 апреля 2019

Моя цель - создать приложение в Azure Active Directory для моих клиентов, используя CSP Global Admin Account, используя 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.


Пожалуйста, помогитея делаю то же самое в C #.

Ответы [ 2 ]

0 голосов
/ 16 апреля 2019
    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.Вы можете сначала попробовать этот фрагмент кода.

Обновление: Не рекомендуется жестко кодировать ваше имя пользователя и пароль.Если вы включите MFA, вы не сможете получить токен.Если MFA отключен, вы можете попробовать следующий фрагмент кода:

    string userName = @"xxxx@xxxx.onmicrosoft.com";
    string passWord = @"password";

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

    result = context.AcquireTokenAsync(
          resource,
          clientid,
          new UserPasswordCredential(userName, passWord)).Result;
0 голосов
/ 10 апреля 2019

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

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

enter image description here

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

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

Update

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

Запрос от Microsoft Graph Explorer

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

{
  "displayName": "Your Application Name"
}

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

enter image description here

Портал Azure:

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

enter image description here

Точка для запоминания

Если вы пытались с помощью Microsoft Graph Explorer, должны установить ниже разрешение.

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

enter image description here

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

Примечание. API-интерфейсы под / beta-версией в Microsoft Graph могут быть изменены. Использование этих API в производственных приложениях не поддерживается.

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