5.6 KiB
Integración de la Biblioteca AuditLogs
Configuración y Uso de AuditLogs
Este documento es una guia para la utilización de la biblioteca AuditLogs en aplicaciones .NET que requieren funcionalidades de auditoría mediante MongoDB.
Configuración Inicial
1. Configuración en appsettings.json
Agregue la siguiente configuración para la conexión a la base de MongoDB que usara la biblioteca, esto se pone en el archivo appsettings.json:
"DatabaseConfigurationAudit": {
"ConnectionString": "mongodb://usuario:contraseña@host:puerto/?authSource=base_de_datos_autenticación",
"DatabaseName": "AuditMeddisPlanUciPanel"
}
2. Instalación de la Biblioteca
Instale la biblioteca AuditLogs a través de NuGet con el siguiente comando:
dotnet add package AuditLogs
previamente se tuvo que haber configurado esta fuente https://smacs-nuget.epigramdev.com/v3/index.json
3. Configuración en Program.cs
Para configurar los servicios de la biblioteca en el archivo Program.cs, se debe incluir el espacio de nombres audit_logs.Extensions y ejecutar el método AddAuditServices:
using audit_logs.Extensions;
var builder = WebApplication.CreateBuilder(args);
// Configuración de servicios de auditoría
builder.Services.AddAuditServices(builder.Configuration);
builder.Services.AddHttpContextAccessor();
4. Modificación de la generación del token para incluir información (Opcional)
El servicio de autoría utiliza httpContext para extraer información del usuario que está haciendo los cambios, usted puede incluir más información si hace cambios en su modelo de usuario por ejemplo agregando un atributo Ip
using MongoDB.Bson;
namespace smacs_uci_api.Domain.Models.MongoModels
{
public class User {
public ObjectId Id { get; set; }
public string Name { get; set; } = string.Empty;
public string Email { get; set; } = string.Empty;
public string IpAddress { get; set; } = string.Empty;
//otros datos
}
}
Luego en la parte donde se hace la autenticación en este caso clase UserService puede modificar la creación del token para agregar esta información
public TokenResult GenerateJwt(User user)
{
// Claims basicos del usuario
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, user.UserName),
new Claim(ClaimTypes.Email, user.Email),
new Claim("IpAddress", user.IpAddress)
};
// Agregar claims de autorizaciones utilizando ClaimsFromAuthorities
claims.AddRange(ClaimsFromAuthorities(user.Authorization));
// mas logica para este metodos...
return new TokenResult
{
AccessToken = new JwtSecurityTokenHandler().WriteToken(accessToken),
RefreshToken = new JwtSecurityTokenHandler().WriteToken(refreshToken),
AccessTokenExpiryTime = accessToken.ValidTo,
RefreshTokenExpiryTime = refreshToken.ValidTo,
User = user
};
}
}
la biblioteca buscará el parámetro IpAddress y lo configura en el registro de autoría, si no se envia pondrá un valor por defecto
Uso en Servicios
Implemente IAuditService en los servicios donde se requiera registrar eventos de auditoría.
El servicio de admisiones, por ejemplo, puede configurarse de la siguiente manera, donde se inyecta IAuditService y IHttpContextAccessor para registrar eventos de auditoría relacionados con las admisiones de pacientes:
Ejemplo en el Servicio de Admisiones
public class AdmissionService : IAdmissionService
{
private readonly IAuditService _auditService;
private readonly IHttpContextAccessor _httpContextAccessor;
// Inyección de otros servicios necesarios...
public AdmissionService(IAuditService auditService, IHttpContextAccessor httpContextAccessor, /* otros parámetros */)
{
_auditService = auditService;
_httpContextAccessor = httpContextAccessor;
// Inicialización de otros servicios...
}
public async Task AdmitPatient(Patient patient)
{
var httpContext = _httpContextAccessor.HttpContext;
var insertedAdmission = /* lógica para admitir al paciente */;
// Registro de evento de auditoría
await _auditService.CreateAuditLogAsync(httpContext.User, null, insertedAdmission);
}
}
Creación de Controladores de Consulta
Para crear un controlador que permita consultar los registros de auditoría, siga este ejemplo:
using audit_logs.Services.Interfaces;
using Microsoft.AspNetCore.Mvc;
namespace smacs_uci_api.Controllers
{
[Route("Audit")]
[ApiController]
public class AuditController : ControllerBase
{
private readonly IAuditService _auditService;
public AuditController(IAuditService auditService)
{
_auditService = auditService;
}
[HttpPost]
public async Task<IActionResult> GetAuditRecordsByAnyTextField(
[FromBody] audit_logs.Models.DTO.AuditLogTextOrDateSearchDTO auditRequestDto)
{
try
{
var result = await _auditService.GetAuditLogsMatchingTextOrDateAsync(auditRequestDto);
return Ok(result);
}
catch (ArgumentException ex)
{
return BadRequest(ex.Message);
}
}
}
}
Este controlador utiliza IAuditService para recuperar registros basados en texto y fechas especificadas por el usuario.