Хобрук: Ваш путь к мастерству в программировании

Приложение Azure для аутентификации пользователей

Я пытаюсь создать консольное приложение .NET для аутентификации пользователей для приложения-функции Azure. Я хочу аутентифицировать пользователей, используя их учетные данные AD, а затем на их основе создать токен. Я считаю, что для этого мне нужно включить «Общедоступные клиентские потоки». Я новичок в этом, но после многих неудачных попыток мне удалось заставить его работать после установки URI идентификатора приложения и области действия в разделе «Открыть API». Я считаю, что в манифесте это свойство называется «identifierUris». Согласно некоторым выводам, и общий доступ, и идентификаторUris не могут использоваться одновременно. Есть ли альтернативный способ добиться этого? Также будут оценены любые объяснения или рассуждения относительно того, почему это не идеально.

Это код, который мы используем для получения токена и его использования:

var publicClient = PublicClientApplicationBuilder
                       .Create(clientId)
                       .WithAuthority(authorityUri)
                       .WithRedirectUri(redirectUri)
                       .Build();

var accessTokenRequest = publicClient.AcquireTokenInteractive(scopes);
var accessToken = await accessTokenRequest.ExecuteAsync();
restRequest.AddHeader("authorization", "Bearer " + token);

Это код Pulumi, создающий приложение Azure AD, где functionApp - это Pulumi.Azure.AppService.FunctionApp, против которого мы пытаемся авторизоваться:

var azureApp = new AzureAD.Application(name, new AzureAD.ApplicationArgs
{
    DisplayName = name,
    AvailableToOtherTenants = false,
    Homepage = "https://VisualStudio/SPN",
    Oauth2AllowImplicitFlow = true,
    ReplyUrls = { "http://localhost" },
    IdentifierUris =
    {
       functionApp.DefaultHostname.Apply(dnsName => "https://" + dnsName)
    },
    PublicClient = true
}, new CustomResourceOptions {DependsOn = functionApp});

Когда для PublicClient установлено значение false, развертывание выполняется нормально. Если для него установлено значение true, соответствующий вызов API возвращает ошибку 400 с таким текстом:

Property identifierUris is invalid

Поэтому мы устанавливаем для PublicClient значение false, а затем вручную обновляем его на true на портале, что отлично работает:

Вкладка

Что нам не хватает?


  • Какой процесс аутентификации вы используете? 19.03.2021
  • Почему нельзя использовать Public client flows и identifierUris одновременно? Есть ли какие-то особые указания в официальных документах? 19.03.2021
  • @CarlZhao Пожалуйста, ознакомьтесь с изменениями, которые я внес, чтобы подробнее рассказать о проблеме. Я работаю с Мифлой. 19.03.2021
  • @CarlZhao Я не припомню ни одного официального документа, в котором упоминалось бы что-либо подобное, но, пожалуйста, взгляните на следующую ссылку: github.com/Azure/azure-cli/issues/7955#issuecomment-500265900. Также обратите внимание, что мы не используем веб-платформу. 20.03.2021
  • Привет, ты проверил мой ответ? Это полезно? 08.04.2021

Ответы:


1

Вам не нужно устанавливать PublicClient на true, потому что это применимо к потоку ROPC, потоку кода устройства или потоку встроенной аутентификации Windows, как показано на скриншоте.

Но согласно вашему коду, я думаю, вы не используете ни одного из трех потоков аутентификации.

Вы должны создать новую регистрацию приложения, которая представляет API / серверную часть (ваше приложение-функцию Azure), и сделать Expose API.

Добавьте область / разрешение (предоставляемое API / серверной стороной) в регистрацию вашего приложения, которая представляет клиентскую сторону (консольное приложение .NET).

Чтобы использовать PublicClientApplicationBuilder, вам просто нужно изменить "allowPublicClient": true в файле манифеста регистрации приложения на стороне клиента. Не добавляйте никаких IdentifierUris и не устанавливайте URI идентификатора приложения и область действия в разделе Expose an API, потому что это должно быть сделано при регистрации приложения, которое представляет сторону API / сервера.

02.04.2021
Новые материалы

Dall-E 2: недавние исследования показывают недостатки в искусстве, созданном искусственным интеллектом
DALL-E 2 — это всеобщее внимание в индустрии искусственного интеллекта. Люди в списке ожидания пытаются заполучить продукт. Что это означает для развития креативной индустрии? О применении ИИ в..

«Очень простой» эволюционный подход к обучению с подкреплением
В прошлом семестре я посетил лекцию по обучению с подкреплением (RL) в моем университете. Честно говоря, я присоединился к нему официально, но я редко ходил на лекции, потому что в целом я нахожу..

Освоение информационного поиска: создание интеллектуальных поисковых систем (глава 1)
Глава 1. Поиск по ключевым словам: основы информационного поиска Справочная глава: «Оценка моделей поиска информации: подробное руководство по показателям производительности » Глава 1: «Поиск..

Фишинг — Упаковано и зашифровано
Будучи старшим ИТ-специалистом в небольшой фирме, я могу делать много разных вещей. Одна из этих вещей: специалист по кибербезопасности. Мне нравится это делать, потому что в настоящее время я..

ВЫ РЕГРЕСС ЭТО?
Чтобы понять, когда использовать регрессионный анализ, мы должны сначала понять, что именно он делает. Вот простой ответ, который появляется, когда вы используете Google: Регрессионный..

Не зря же это называют интеллектом
Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..

LeetCode Проблема 41. Первый пропущенный положительный результат
LeetCode Проблема 41. Первый пропущенный положительный результат Учитывая несортированный массив целых чисел, найдите наименьшее пропущенное положительное целое число. Пример 1: Input:..