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;
}
}