using System.Text; using API.Configurations; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.HttpOverrides; using Microsoft.IdentityModel.Tokens; using RecNet.Application; using RecNet.Infrastructure; using RecNet.Infrastructure.Services.Tokens; using RecNet.ServiceDefaults; namespace API; public class Program { public static void Main(string[] args) { var builder = WebApplication.CreateBuilder(args); var recNetOptions = builder.Configuration.GetSection("RecNet").Get() ?? new RecNetOptions(); var jwtOptions = builder.Configuration.GetSection("Jwt").Get() ?? new JwtOptions(); builder.AddServiceDefaults(); builder.Services.Configure(options => { options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedHost | ForwardedHeaders.XForwardedProto; options.KnownIPNetworks.Clear(); options.KnownProxies.Clear(); }); builder.Services.AddApplication(); builder.AddInfrastructure(); builder.Services .AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtOptions.Secret)), ValidateIssuer = true, ValidIssuer = jwtOptions.Issuer, ValidateAudience = true, ValidAudience = jwtOptions.Audience, ValidateLifetime = true, ClockSkew = TimeSpan.FromMinutes(1) }; }); builder.Services.AddAuthorization(); builder.Services.AddControllers(); var app = builder.Build(); if (recNetOptions.UseForwardedHeaders) app.UseForwardedHeaders(); app.UseAuthentication(); app.UseAuthorization(); app.MapControllers(); app.MapDefaultEndpoints(); app.Run(); } }