33 lines
907 B
C#
33 lines
907 B
C#
|
|
using Microsoft.AspNetCore.Http;
|
||
|
|
|
||
|
|
namespace SIGCM2.Api.Middleware;
|
||
|
|
|
||
|
|
/// UDT-010 — post-auth middleware that reads the JWT "sub" claim and stores the
|
||
|
|
/// resolved ActorUserId in HttpContext.Items. Anonymous requests leave it unset.
|
||
|
|
/// ActorRoleId is reserved for a future batch (rol code → id resolution).
|
||
|
|
public sealed class AuditActorMiddleware
|
||
|
|
{
|
||
|
|
public const string ItemActorUserId = "audit:actorUserId";
|
||
|
|
|
||
|
|
private readonly RequestDelegate _next;
|
||
|
|
|
||
|
|
public AuditActorMiddleware(RequestDelegate next)
|
||
|
|
{
|
||
|
|
_next = next;
|
||
|
|
}
|
||
|
|
|
||
|
|
public async Task InvokeAsync(HttpContext ctx)
|
||
|
|
{
|
||
|
|
if (ctx.User.Identity?.IsAuthenticated == true)
|
||
|
|
{
|
||
|
|
var sub = ctx.User.FindFirst("sub")?.Value;
|
||
|
|
if (int.TryParse(sub, out var userId))
|
||
|
|
{
|
||
|
|
ctx.Items[ItemActorUserId] = userId;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
await _next(ctx);
|
||
|
|
}
|
||
|
|
}
|