У меня проблемы с аутентификацией с помощью идентификатора управляемой службы в службе приложений Azure, защищенной с помощью AAD - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь использовать HttpClient для подключения к веб-службе, размещенной в службе приложений Azure, которая защищена с помощью AAD с использованием идентификатора управляемой службы. При попытке подключения из клиентского кода с помощью AzureServiceTokenProvider я получаю исключение AzureServiceTokenProviderException при попытке получить токен

Базовая настройка:

AAD-арендатор AADX.onmicrosoft.com Содержит регистрацию приложения для целевой службы приложений mytest. Он имеет идентификатор приложения XXXXXXXX-XXXX-49e6-a806-5440b00282b1 и в соответствии с манифестом имеет идентификатор URL "https://AADX.onmicrosoft.com/mytest"

Служба приложений "mytest" была создана в рамках подписки под этим AAD, поэтому с URL https://mytest.azurewebsites.net

В настройке аутентификации для службы приложения включена функция «Аутентификация службы приложения». Действие, которое нужно выполнить, если запрос не прошел проверку подлинности, имеет значение «Войти в Azure Active Directory». Провайдер аутентификации AAD настроен с экспресс-настройками, указывающими на AADX и использующими приложение mytest.

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

Существуют службы приложений и настольные приложения, размещенные в RemoteApp, которым необходим доступ ко всем службам, размещенным в приложении. Управляемая идентификация включена для всей инфраструктуры в клиенте, который должен подключиться.

Когда я использую приведенный ниже код, я получаю исключение в связи с невозможностью получить токен. Если я изменю запрашиваемый ресурс на "https://login.microsoftonline.com/", то я могу получить токен, хотя и неправильный (на самом деле он регистрирует мой сетевой логин MS, а не учетную запись, выбранную в настройках)

        private static HttpClient ConnectToClient()
        {
            String BaseUrl = "https://mytest.azurewebsites.net/";
            String AdResource = "https://AADX.onmicrosoft.com/mytest";

            AzureServiceTokenProvider TokenProvider = new AzureServiceTokenProvider();
            String Token = TokenProvider.GetAccessTokenAsync(AdResource).Result;

            HttpClient Client = new HttpClient()
            {
                BaseAddress = new Uri(BaseUrl)
            };

            Client.DefaultRequestHeaders.Accept.Clear();
            Client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));


            Client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", Token);

            return Client;
        }

        private static String GetContent()
        {
            String Output = String.Empty;

            using (HttpClient Client = ConnectToClient())
            {
                HttpResponseMessage ResponseMessage = Client.GetAsync("api/Test/").Result;

                if (ResponseMessage.IsSuccessStatusCode)
                {
                    Output = ResponseMessage.Content.ReadAsStringAsync().Result;
                }
            }

            return Output;
        }

Я ожидаю, что токен будет возвращен как допустимое значение, которое будет использоваться в качестве токена на предъявителя. Вместо этого в точке вызова GetAccessTokenAsync выдается следующее исключение:

System.AggregateException HResult = 0x80131500 Сообщение = произошла одна или несколько ошибок. (Параметры: Строка подключения: [Строка подключения не указана], Ресурс: https://AADX.onmicrosoft.com/mytest, Полномочия:. Сообщение об исключении: пробовал следующие 3 метода для получения токена доступа, но ни один из них не работал.

Параметры: Строка подключения: [Строка подключения не указана], Ресурс: https://AADX.onmicrosoft.com/mytest, Полномочия:. Сообщение об исключении: Попытка получить токен с использованием идентификатора управляемой службы. Невозможно подключиться к конечной точке MSI. Убедитесь, что вы работаете на ресурсе Azure, для которого настроена MSI. Параметры: Строка подключения: [Строка подключения не указана], Ресурс: https://AADX.onmicrosoft.com/mytest, Полномочия:. Сообщение об исключении: Попытка получить токен с помощью Visual Studio. Не удалось получить токен доступа. Исключение для поставщика токенов Visual Studio Microsoft.Asal.TokenService.exe: TS003: ошибка, TS004: невозможно получить токен доступа. «Не удалось обновить токен доступа»

1 Ответ

0 голосов
/ 13 июня 2019

AzureServiceTokenProvider использует управляемую идентификацию при развертывании в Azure.Когда он не в Azure, он поддерживает другие параметры аутентификации.Вы можете использовать явные учетные данные участника службы, указанные в переменной среды, без изменения кода.Пожалуйста, смотрите документацию здесь .

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