using System.Security.Claims; namespace StellaOps.Gateway.WebService.Middleware; public sealed class TenantMiddleware { private readonly RequestDelegate _next; private readonly ILogger _logger; public TenantMiddleware(RequestDelegate next, ILogger logger) { _next = next; _logger = logger; } public async Task InvokeAsync(HttpContext context) { if (GatewayRoutes.IsSystemPath(context.Request.Path)) { await _next(context); return; } var tenantId = context.User.FindFirstValue("tid"); if (!string.IsNullOrWhiteSpace(tenantId)) { context.Items[GatewayContextKeys.TenantId] = tenantId; if (!context.Request.Headers.ContainsKey("tid")) { context.Request.Headers["tid"] = tenantId; } } else { _logger.LogDebug("No tenant claim found on request {TraceId}", context.TraceIdentifier); } await _next(context); } }