Hier ist meine JwtBearerEvents-Implementierung:
Code: Select all
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;
}
}
Code: Select all
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;
}
Problem
Der Aufruf von GetTokenAsync löst das TokenValidated-Ereignis aus, was zu einer rekursiven Schleife führt.
Frage
Wie kann ich das sicher abrufen Zugriffstoken, ohne die Middleware-Pipeline auszulösen oder eine Rekursion zu verursachen? Gibt es eine andere (bessere) Möglichkeit, mit Gruppenüberschreitungen umzugehen?
Jede Hilfe ist willkommen. Danke!