Wie kann ich Zugriffstoken in ASP.NET Core abrufen, ohne eine Middleware-Pipeline-Rekursion in JwtBearerEvents auszulöseC#

Ein Treffpunkt für C#-Programmierer
Guest
 Wie kann ich Zugriffstoken in ASP.NET Core abrufen, ohne eine Middleware-Pipeline-Rekursion in JwtBearerEvents auszulöse

Post by Guest »

Ich erstelle eine ASP.NET Core-API, die Azure Entra ID (ehemals Azure AD) zur Authentifizierung verwendet. Ich muss das TokenValidated-Ereignis in JwtBearerEvents verarbeiten, um Gruppenüberschreitungsszenarien zu bewältigen. Dazu verwende ich einen Dienst, der versucht, das Zugriffstoken des Benutzers aus dem HttpContext abzurufen. Meine aktuelle Implementierung löst jedoch eine Rekursion aus, da das Abrufen des Tokens die Middleware-Pipeline erneut aufzurufen scheint.
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;
}
}
Die ProcessAnyGroupoverage-Methode versucht, das Zugriffstoken mithilfe dieses Codes abzurufen:

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;
}
Das Zugriffstoken wird benötigt, um die Gruppen des Benutzers aus Microsoft Graph über http abzufragen.
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!

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post