Вот моя реализация 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;
}
}
Код: Выделить всё
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;
}
Проблема
Вызов GetTokenAsync запускает событие TokenValidated, что приводит к рекурсивному циклу.
Вопрос
Как я могу безопасно получить токен доступа, не запуская конвейер промежуточного программного обеспечения и не вызывая рекурсию? Есть ли другой (лучший) способ справиться с переизбытком группы?
Любая помощь приветствуется. Спасибо!
Подробнее здесь: https://stackoverflow.com/questions/793 ... ware-pipel