Проблемы с проверкой подлинности Azure AD B2C и доступом к защищенным ресурсам при миграции .NET 8

Я переношу устаревшее приложение .NET на .NET 8, где проверка подлинности переносится из локальной базы данных удостоверений в Azure AD B2C. Здесь я сначала проверяю Azure AD B2C. Если пользователь недоступен, я проверяю локальную базу данных, а затем переношу пользователя из локальной базы данных в Azure AD B2C.

Чтобы реализовать аутентификацию Azure AD B2C, я настроил аутентификацию в классе Program.

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApi(options =>
    {
        Configuration.Bind("AzureAdB2C", options);
    },
    options => { Configuration.Bind("AzureAdB2C", options); });

Кроме того, я использую встроенный поставщик удостоверений и UserManager для аутентификации в локальной базе данных удостоверений.

services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(Configuration.GetValue<string>("ConnectionStrings:DefaultConnection")));

services.AddIdentity<IdentityUser, IdentityRole>(options =>
    {
        options.User.RequireUniqueEmail = false;
    })
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddDefaultTokenProviders();

Я аутентифицирую пользователей для Azure AD B2C, используя пользовательский поток SignUpSignIn. В моем API AuthController.cs конечная точка входа обрабатывает аутентификацию пользователя.

[HttpPost("login")]
[AllowAnonymous]
public async Task<IActionResult> Login(UserCredentials model)
{
    if (ModelState.IsValid)
    {
        var user = _userManager.Users.FirstOrDefault(x => x.Email == model.Email);
        if (user != null && await _userManager.CheckPasswordAsync(user, model.Password))
        {
            return Ok();
        }
    }
    return Unauthorized();
}

После успешной аутентификации с помощью Azure AD B2C последующие запросы на доступ к защищенным ресурсам завершаются неудачей со следующим исключением.

HttpRequestException: Invalid status code in the HttpResponseMessage: NotFound.
TodoListClient.Services.TodoListService.GetAsync() in TodoListService.cs

throw new HttpRequestException($"Invalid status code in the HttpResponseMessage: {response.StatusCode}.");
TodoListClient.Controllers.TodoListController.Index() in TodoListController.cs

Это исключение возникает при последующих запросах, когда пользователь успешно входит в систему через Azure AD B2C.

Я следовал этой документации в Microsoft Настройте аутентификацию в примере веб-приложения, и единственной дополнительной настройкой, которую я сделал, было добавление службы идентификации в веб-API. Однако когда в программе одновременно настроены аутентификация Azure AD B2C и служба аутентификации удостоверений, я сталкиваюсь с проблемами. Существует ли особый способ совместной настройки этих служб или существуют ограничения на их одновременное использование?

Можете ли вы предоставить файл конфигурации.

Harshitha 14.03.2024 17:04
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
71
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я смог найти ответ на свой вопрос. Эта проблема возникает из-за того, что активные обе конфигурации могут привести к путанице в отношении того, какой метод аутентификации использовать для запросов API.

Более простой способ справиться с этой ситуацией — выбрать одного поставщика аутентификации. В моем случае я оставил Azure AD B2C для обработки всех требований аутентификации и удалил конфигурацию services.AddIdentity. Кроме того, я создал отдельный проект для работы с базой данных идентификационных данных (AddIdentity).

Предложения: Если кто-то столкнется с этой проблемой и если необходимы оба поставщика, внедрите механизм выбора подходящего поставщика на основе определенных критериев (например, происхождения запроса, типа пользователя). Однако это требует более сложной настройки и тщательной обработки логики аутентификации во всем приложении, что может привести к ненужным накладным расходам.

Другие вопросы по теме

Политика авторизации Istio для одноранговой авторизации
IPhone: в iOS 17.4 нет данных о атмосферном давлении
Swagger не авторизуется в Azure при обслуживании от root, "/", хотя работает по пути, "/swagger", "/boink" и т. д
Swagger выдает «Auth ErrorTypeError: не удалось получить» при авторизации
Как я могу обеспечить беспрепятственную аутентификацию между мобильным приложением и веб-приложением?
MS Graph API Недостаточно разрешений при использовании Python SDK, достаточно при выполнении обычных HTTP-запросов
Учетная запись службы GA4: у пользователя недостаточно разрешений для этого профиля
Для достижения аутентификации с использованием двух или более схем и получения статуса IsAuthenticated
Как я могу аутентифицировать токен пользователя в Angular Guard, если я использую только Http?
Как реализовать гибкое управление доступом на основе ролей с несколькими ролями пользователей в Ruby on Rails?

Похожие вопросы

WKWebView или WebView: как выполнить базовую задачу аутентификации, аналогичную тому, как это делает Safari?
Невозможно прослушивать события регистрации и электронной почты в Supabase во Flutter
Zitadel динамически создает пользователей сервиса
Как я могу обеспечить беспрепятственную аутентификацию между мобильным приложением и веб-приложением?
Почему я получаю ECONNRESET, если не отменить его и сразу после этого не вызвать службу API Azure (APIM)?
Обновите компонент заголовка, чтобы отображать кнопку выхода из системы с помощью маршрутизатора приложений NextJS
Как обрабатывать токен обновления и токен доступа для системы аутентификации
Невозможно заставить работать настроенные параметры при принудительной аутентификации на основе ключей API
Нужно ли вам «раскрывать API» в Microsoft Entra ID, если ваш API не использует MS Graph? Достаточно ли валидации?
Статус ошибки 422 для сценария переноса аутентификации клерка