40 lines
1.5 KiB
C#
40 lines
1.5 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|
|
}
|