Вызов функции Azure в C# клиенте с аутентификацией AAD - PullRequest
1 голос
/ 15 апреля 2020

Я создал образец Azure Функция, ничего сложного, просто Hello, World. Приложение было зарегистрировано в AAD, и функция настроена для аутентификации AAD, а уровень авторизации установлен на Anonymous. С помощью браузера я могу перейти к URL-адресу функции, попросить войти в систему и получить ожидаемые результаты. При использовании клиента C# после получения токена (который совпадает с токеном, используемым в браузере) я получаю 401 несанкционированный результат. Я также пробовал Почтальон с теми же результатами; 401 «У вас нет разрешения на просмотр этого каталога или страницы.»

var clientCredential = new ClientCredential("16c17039-xxxx-4514-xxxx-fc68a97fxxxx", "00000009q_XwxPP]oyDo8UqZfAsxxxx");
AuthenticationContext context = new AuthenticationContext("https://login.microsoftonline.com/xxxxx.onmicrosoft.com", false);
AuthenticationResult authResult = await context.AcquireTokenAsync(
    "16c17039-xxxx-4514-xxxx-fc68a97fxxxx",
    clientCredential);

HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", authResult.AccessToken);
var response = await client.GetAsync("https://xxxx.azurewebsites.net/api/Sample?code=xxxxx");
response.EnsureSuccessStatusCode();

Очевидно, что мне не хватает какой-то конфигурации, но, похоже, не удается найти причину.

1 Ответ

0 голосов
/ 16 апреля 2020

Я не воспроизвел вашу проблему на моей стороне. Вот мои шаги для справки.

1.Создайте функцию с помощью триггера http

enter image description here

2. Включите аутентификацию службы приложений с помощью используя режим Express.

enter image description here

3.Вызовите URL функции, используя C#

static void Main(string[] args)
        {
            var clientCredential = new ClientCredential("{app_client_id}", "{app_client_secret}");
            AuthenticationContext context = new AuthenticationContext("https://login.microsoftonline.com/xx.onmicrosoft.com", false);
            AuthenticationResult authResult = context.AcquireTokenAsync(
                "{app_client_id}",
                clientCredential).Result;

            HttpClient client = new HttpClient();
            client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", authResult.AccessToken);
            var response = client.GetAsync("https://tonytestad.azurewebsites.net/api/HttpTrigger1?code=LoyOi4C&name=123").Result;
            response.EnsureSuccessStatusCode();
        }

4. См. результат в

enter image description here

Единственное отличие в коде состоит в том, что я использовал Result для получения результата.

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