using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; namespace ApiDatosGuadex.Filtros { public class FiltroAutenticacionBasica : Attribute, IAuthorizationFilter { private readonly string _usuarioPermitido; private readonly string _contrasenaPermitida; public FiltroAutenticacionBasica(IConfiguration configuration) { var authSettings = configuration.GetSection("Authentication"); _usuarioPermitido = authSettings["Username"]; _contrasenaPermitida = authSettings["Password"]; } public void OnAuthorization(AuthorizationFilterContext contexto) { var encabezadoAutorizacion = contexto.HttpContext.Request.Headers["Authorization"].ToString(); if (string.IsNullOrEmpty(encabezadoAutorizacion) || !encabezadoAutorizacion.StartsWith("Basic ")) { contexto.Result = new UnauthorizedResult(); return; } var credencialesCodificadas = encabezadoAutorizacion.Substring("Basic ".Length).Trim(); var credencialesDecodificadas = System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(credencialesCodificadas)); var partes = credencialesDecodificadas.Split(':'); if (partes.Length != 2 || partes[0] != _usuarioPermitido || partes[1] != _contrasenaPermitida) { contexto.Result = new UnauthorizedResult(); } } } }