Как получить токен доступа в ASP.NET Core без запуска рекурсии конвейера промежуточного программного обеспечения в JwtBeC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как получить токен доступа в ASP.NET Core без запуска рекурсии конвейера промежуточного программного обеспечения в JwtBe

Сообщение Anonymous »

Я создаю API ASP.NET Core, который использует Azure Entra ID (ранее Azure AD) для аутентификации. Мне нужно обработать событие TokenValidated в JwtBearerEvents для обработки сценариев перегрузки группы. Для этого я использую службу, которая пытается получить токен доступа пользователя из HttpContext. Однако моя текущая реализация вызывает рекурсию, поскольку получение токена, похоже, снова вызывает конвейер промежуточного программного обеспечения.
Вот моя реализация JwtBearerEvents:

Код: Выделить всё

public class JwtBearerEventsProcessor(IGroupOverageService groupOverageService) : JwtBearerEvents
{
public override async Task TokenValidated(TokenValidatedContext context)
{
if (context != null)
{
// Handle group overage (calls a method to process claims)
await groupOverageService.ProcessAnyGroupOverage(context);
}

await Task.CompletedTask;
}
}
Метод ProcessAnyGroupoverage пытается получить токен доступа с помощью этого кода:

Код: Выделить всё

public async Task GetAccessToken()
{
if (_httpContextAccessor.HttpContext == null)
{
throw new InvalidOperationException("HttpContext not initialized!");
}

//FIXME: This call triggers TokenValidated which leads to recursion.
var accessToken = await _httpContextAccessor.HttpContext.GetTokenAsync("access_token");

if (string.IsNullOrWhiteSpace(accessToken))
{
throw new InvalidOperationException("Unable to get access token from HttpContext!");
}

return accessToken;
}
токен доступа необходим для запроса групп пользователя из Microsoft Graph через http.
Проблема
Вызов GetTokenAsync запускает событие TokenValidated, что приводит к рекурсивному циклу.
Вопрос
Как я могу безопасно получить токен доступа, не запуская конвейер промежуточного программного обеспечения и не вызывая рекурсию? Есть ли другой (лучший) способ справиться с переизбытком группы?
Любая помощь приветствуется. Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/793 ... ware-pipel
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»