Программно зарегистрировать приложение в Azure Active Directory, используя график API - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь зарегистрировать приложение в Azure AD с помощью графического API, у меня есть метод CallRestAPI, который сделает запрос.Ниже приведен код

    public async Task<Response> AzureADApp()
    {
        Response responseMessage = new Response();
        try
        {
            var token = GenerateToken();
            List<(string, string)> listHeaders = new List<(string, string)>();
            listHeaders.Add(("Authorization", string.Concat("Bearer" + " " + token)));
            listHeaders.Add(("Content-Type", "application/json"));

            List<(string, string)> param = new List<(string, string)>();
            param.Add(("displayName", "VS1Application123"));
            param.Add(("homepage", "https://localhost:44358/"));
            param.Add(("identifierUris", "https://G7CRM4L/6958490c-21ae-4885-804c-f03b3add87ad"));

            string callUrl = "https://graph.windows.net/G7CRM4L/applications/?api-version=1.6";
            var result = CallRestAPI(callUrl, "", Method.POST, listHeaders, param);

        }
        catch (Exception ex)
        {
            responseMessage.StatusCode = Convert.ToInt16(HttpStatusCode.InternalServerError);
        }
        return responseMessage;
    }

    public async Task<IRestResponse> CallRestAPI(string BaseAddress, string SubAddress, Method method, List<(string, string)> headersList = null, List<(string, string)> paramsList = null)
    {
        var call = new RestClient(BaseAddress + SubAddress);
        var request = new RestRequest(method);

        if (headersList != null)
        {
            foreach (var header in headersList)
            {
                request.AddHeader(header.Item1, header.Item2);
            }
        }
        if (paramsList != null)
        {
            foreach (var param in paramsList)
            {
                request.AddParameter(param.Item1, param.Item2);
            }
        }

        var response = call.ExecuteTaskAsync(request);

        return response.Result;
    }

Я думаю, что способ отправки параметров в теле неверен, может кто-нибудь подсказать мне, как заставить этот код работать, или есть лучший способ добиться того же?Спасибо.

1 Ответ

0 голосов
/ 06 февраля 2019

Лучшим способом добиться того же, то есть зарегистрировать приложение в Azure AD, будет использование клиентской библиотеки графиков Azure AD

Я говорю, что это лучший подход, поскольку при использованииклиентская библиотека, в которой вы получаете множество преимуществ, таких как отсутствие необработанной обработки HTTP-запросов, написание более удобного и декларативного кода на C #, в зависимости от хорошо протестированной библиотеки, поддержки асинхронности и т. д.

POST https://graph.windows.net/{tenant-id}/applications?api-version=1.6

Вот пример кода (C #) для создания приложения Azure AD.

Обратите внимание, что я сохранил флаг app.PublicClient как true для регистрации в качестве собственного приложения.Вы можете установить значение false, если хотите зарегистрировать его как веб-приложение.

        using System;
        using System.Collections.Generic;
        using System.Linq;
        using System.Text;
        using System.Threading.Tasks;
        using Microsoft.Azure.ActiveDirectory.GraphClient;
        using Microsoft.IdentityModel.Clients.ActiveDirectory;

        namespace CreateAzureADApplication
        {
            class Program
            {
                static void Main(string[] args)
                {

                    ActiveDirectoryClient directoryClient;

                    ActiveDirectoryClient activeDirectoryClient = new ActiveDirectoryClient(new Uri("https://graph.windows.net/{yourAADGUID}"),
            async () => await GetTokenForApplication());


                    Application app = new Application();
                    app.DisplayName = "My Azure AD Native App";
                    app.PublicClient = true;
                    app.Homepage = "https://myazureadnativeapp";
                    activeDirectoryClient.Applications.AddApplicationAsync(app).GetAwaiter().GetResult();

                 }

             public static async Task<string> GetTokenForApplication()
             {
                   AuthenticationContext authenticationContext = new AuthenticationContext(
                "https://login.microsoftonline.com/{yourAADGUID}",
                false);

            // Configuration for OAuth client credentials 

                ClientCredential clientCred = new ClientCredential("yourappclientId",
                    "yourappclientsecret"
                    );
                AuthenticationResult authenticationResult =
                    await authenticationContext.AcquireTokenAsync("https://graph.windows.net", clientCred);

                return authenticationResult.AccessToken;

            }
          }
        }

Настройка : у меня зарегистрировано приложение, зарегистрированное в Azure AD, для которого требуются разрешения в качестве разрешения приложения- Чтение и запись всех приложений и предоставление разрешений сделано для этого приложения.Теперь, используя идентификатор клиента этого приложения и его секретный ключ, получается токен и вызывается API-интерфейс Azure AD Graph для создания приложения.Не обязательно использовать разрешения приложения, вы также можете использовать делегированные разрешения, запрашивая учетные данные у пользователя.См. Ссылки на более подробные примеры (старые, но все еще полезные).

Кстати, вы можете сделать это, используя более новый Microsoft Graph API , а также

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

, но возможность создавать приложения все еще находится в стадии бета-тестирования и, следовательно, не рекомендуется дляпроизводственные нагрузки.Поэтому, несмотря на то, что Microsoft Graph API был бы рекомендован для большинства сценариев, по крайней мере, для этого, использование Azure AD Graph API является подходящим способом.

Я рассмотрел это чуть более подробно в аналогичном ТАК сообщение здесь.

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