using Microsoft.AspNetCore.Authentication; using Microsoft.Extensions.Options; using System.Text.Encodings.Web; namespace Distribution.Middleware; /// /// Authentication handler that exists solely to provide Challenge (401) and Forbid (403) /// responses for UseAuthorization(). Token validation is handled upstream by AuthMiddleware, /// so HandleAuthenticateAsync returns NoResult to leave HttpContext.User untouched. /// public class BearerResponseHandler( IOptionsMonitor options, ILoggerFactory logger, UrlEncoder encoder) : AuthenticationHandler(options, logger, encoder) { protected override Task HandleAuthenticateAsync() => Task.FromResult(AuthenticateResult.NoResult()); protected override Task HandleChallengeAsync(AuthenticationProperties properties) { Response.StatusCode = StatusCodes.Status401Unauthorized; return Task.CompletedTask; } protected override Task HandleForbiddenAsync(AuthenticationProperties properties) { Response.StatusCode = StatusCodes.Status403Forbidden; return Task.CompletedTask; } }