using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.EntityFrameworkCore; using Microsoft.IdentityModel.Tokens; using QuotifyBE.Controllers; using QuotifyBE.Data; using System.Text; var builder = WebApplication.CreateBuilder(args); // Configure Database Connection var connectionString = builder.Configuration.GetConnectionString("DefaultConnection") ?? throw new InvalidOperationException("Connection string 'DefaultConnection' not found."); builder.Services.AddDbContext(options => options.UseNpgsql(connectionString)); var JwtSecret = builder.Configuration["JwtSecret"] ?? throw new InvalidOperationException("JWT token secret is not configured!!! Please configure JwtSecret in appsettings.json!"); var DomainName = builder.Configuration["DomainName"] ?? throw new InvalidOperationException("Domain name is not configured!!! Please configure DomainName in appsettings.json!"); // Configure JWT authentication // https://medium.com/@solomongetachew112/jwt-authentication-in-net-8-a-complete-guide-for-secure-and-scalable-applications-6281e5e8667c builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = DomainName, ValidAudience = DomainName, IssuerSigningKey = new SymmetricSecurityKey( Encoding.UTF8.GetBytes(JwtSecret) ) }; }); // Add services to the container. builder.Services.AddAuthorization(); builder.Services.AddSingleton(builder.Configuration); builder.Services.AddScoped(); builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseMigrationsEndPoint(); app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); app.UseAuthentication(); app.UseAuthorization(); app.MapControllers(); app.Run();