Как получить «Токен доступа B2C JWT» от вошедшего в систему пользователя?

Я работаю с .Net Core Web API и .Net Core Web MVC Application. Оба они используют Azure AD B2C для аутентификации пользователей. Но чтобы получить ответ от HttpRequest из веб-API, мне нужно предоставить токен доступа JWT от B2C для вошедшего в систему пользователя в моем веб-приложении MVC. Есть ли способ получить этот токен доступа внутри контроллера, используя аутентифицированного «Пользователя».

Я попытался получить доступ к утверждениям вошедшего в систему пользователя, но мне не повезло. Я также использовал jwt.ms, чтобы проверить, хорошо ли работает рабочий процесс B2C и что токен JWT создается и работает. Приложение MVC аутентифицирует пользователя, а веб-API отлично работает с жестко заданным токеном. Мне просто нужно получить токен доступа от вошедшего в систему пользователя, а не жестко запрограммировать его.

Я ожидаю, что смогу получить токен доступа B2C JWT, чтобы позже передать его в веб-API и защитить свои запросы.

Еще одна информация, которая может помочь, заключается в том, что я использую шаблон B2C для веб-приложения MVC .Net Core, которое использует пакет Nuget AzureADB2C.UI для получения JWT из Azure.

Andre Vigneault 20.06.2019 22:10
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
1 616
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вам нужна именно эта строка токена? Если это так, вы можете получить доступ к заголовкам, используя HttpContext внутри контроллера? HttpContext будет иметь коллекцию заголовков, которые были переданы в

На самом деле это исходный веб-токен JSON из строки B2C, который мне нужен, но мне нужно получить к нему доступ из контроллера MVC из веб-приложения. Я попробовал ваше предложение, но после просмотра заголовков HttpContext я все еще не вижу строку токена. Может быть, у вас есть какой-нибудь пример кода или фрагмент кода, на который я мог бы взглянуть?

Andre Vigneault 20.06.2019 22:09

@AndreVigneault, насколько я знаю, должен быть в заголовке с ключом Authorization и значением Bearer <token here>. Вы вообще не видите заголовок Auth?

GregH 20.06.2019 22:20

То, что я сказал, «должно» быть правильным. Добавили ли вы IHttpContextAccessor в регистрацию ServicesCollection и внедрили ли его в свой контроллер для доступа к заголовкам? Я найду для вас пример кода

Robert Perry 20.06.2019 22:24

Спасибо за продолжение, Роберт, да, я использую IHttpContextAccessor, но все еще не могу найти токен JWT, пример кода наверняка будет полезен, если он у вас есть.

Andre Vigneault 21.06.2019 00:47

Вы можете обратиться к это пример приложения.

Он использует ПО промежуточного слоя ASP.NET Core Azure AD B2C для аутентификации конечного пользователя и MSAL.NET для получения, кэширования и обновления маркера доступа.

Токен доступа получен в класс AzureADB2COpenIdConnectOptionsConfigurator.

Пример кода для метода контроллера, ссылающегося на токен доступа, — здесь.

Спасибо за ваш ответ, Крис, но B2C уже предоставляет мне (мой сайт с пакетом nuget выше) начальный JWT. Нет ли где-нибудь доступа к этому начальному токену? Должен ли я вручную получать дополнительные токены?

Andre Vigneault 21.06.2019 00:45

Привет @AndreVigneault. Я обновил приведенный выше ответ со ссылкой на пакет AzureADB2C.UI.

Chris Padgett 25.06.2019 05:58
Ответ принят как подходящий

Получив некоторую помощь от команды MS AzureADB2C.UI GitHub, мы смогли решить проблему. Проблема заключалась в том, что токены не сохраняются по умолчанию в библиотеке, поэтому нам нужно было настроить ODC, чтобы указать, что токены должны быть сохранены для будущего использования в приложении. Итак, вот пример кода конфигурации «Запуск» и пример того, как запросить «токен доступа JWT» у контроллера.

Запуск.cs:

    services.Configure(AzureADB2CDefaults.OpenIdScheme, options => {
            options.SaveTokens = true;
    });

Контроллер:

    string idToken = await HttpContext.GetTokenAsync("id_token");

Более подробную информацию о том, как была решена проблема, можно найти по следующей ссылке: https://github.com/aspnet/AspNetCore/issues/11424

Привет @Andre Это также сохраняет токен доступа?

Chris Padgett 21.06.2019 05:10

Да, @ChrisPadgett, это так.

Andre Vigneault 21.06.2019 05:15

Спасибо, Андре, я полагаю, что пакет AzureADB2C.UI не обновляет токен доступа после истечения срока его действия. Я создал пример приложения, которое делает это с помощью MSAL.NET. Я обновил свой другой ответ ссылкой на пример приложения, которое можно найти здесь.

Chris Padgett 25.06.2019 06:03

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