using Microsoft.Extensions.Configuration; using StubbedContextLib; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.SqlServer; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Entities; using DTOToEntity; using DTO; using System; using Microsoft.AspNetCore.Mvc; using Microsoft.IdentityModel.Tokens; using DbContextLib; using Microsoft.AspNetCore.Authentication.JwtBearer; using System.Text; using Microsoft.OpenApi.Models; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); builder.Services.AddDbContext(options => { options.UseSqlServer(builder.Configuration.GetConnectionString("StubbedContext")); }); builder.Services.AddSwaggerGen(option => { option.SwaggerDoc("v1", new OpenApiInfo { Title = "Test API", Version = "v1" }); option.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme { In = ParameterLocation.Header, Description = "Please enter a valid token", Name = "Authorization", Type = SecuritySchemeType.Http, BearerFormat = "JWT", Scheme = "Bearer" }); option.AddSecurityRequirement(new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Reference = new OpenApiReference { Type=ReferenceType.SecurityScheme, Id="Bearer" } }, new string[]{} } }); }); var validIssuer = builder.Configuration.GetValue("JwtTokenSettings:ValidIssuer"); var validAudience = builder.Configuration.GetValue("JwtTokenSettings:ValidAudience"); var symmetricSecurityKey = builder.Configuration.GetValue("JwtTokenSettings:SymmetricSecurityKey"); builder.Services.AddAuthentication(options => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; //options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; }) .AddJwtBearer(options => { options.IncludeErrorDetails = true; options.TokenValidationParameters = new TokenValidationParameters() { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = validIssuer, ValidAudience = validAudience, IssuerSigningKey = new SymmetricSecurityKey( Encoding.UTF8.GetBytes(symmetricSecurityKey) ), }; }); builder.Services.AddApiVersioning(o => { o.DefaultApiVersion = new ApiVersion(1, 1); o.AssumeDefaultVersionWhenUnspecified = true; o.ReportApiVersions = true; }); builder.Services.AddScoped(); builder.Services.AddScoped,LangueService>(); builder.Services.AddScoped,RoleService>(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseAuthentication(); app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run();