using System.Text; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.IdentityModel.Tokens; using SIGCM.Infrastructure; using SIGCM.Infrastructure.Data; var builder = WebApplication.CreateBuilder(args); // 1. Agregar servicios al contenedor. builder.Services.AddControllers(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); // 2. Configurar Autenticación JWT var key = Encoding.ASCII.GetBytes(builder.Configuration["Jwt:Key"]!); builder.Services.AddAuthentication(options => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }) .AddJwtBearer(options => { options.RequireHttpsMetadata = false; options.SaveToken = true; options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(key), ValidateIssuer = true, ValidIssuer = builder.Configuration["Jwt:Issuer"], ValidateAudience = true, ValidAudience = builder.Configuration["Jwt:Audience"], ValidateLifetime = true, ClockSkew = TimeSpan.Zero }; }); // 3. Agregar Capa de Infraestructura builder.Services.AddInfrastructure(); // 4. Configurar CORS builder.Services.AddCors(options => { options.AddPolicy("AllowFrontend", policy => { policy.WithOrigins( "http://localhost:5173", "http://localhost:5174", "http://localhost:5175", "http://localhost:5177") .AllowAnyHeader() .AllowAnyMethod(); }); }); var app = builder.Build(); // --- Configuración del Pipeline HTTP --- if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); app.UseStaticFiles(); // Para servir imágenes app.UseCors("AllowFrontend"); // IMPORTANTE: El orden importa aquí app.UseAuthentication(); // <- Esto faltaba app.UseAuthorization(); app.MapControllers(); // Inicializar BD using (var scope = app.Services.CreateScope()) { var initializer = scope.ServiceProvider.GetRequiredService(); await initializer.InitializeAsync(); } app.Run();