using BuaaLocationServer.Middlewares.Db; using BuaaLocationServer.Middlewares.Jwts; using Microsoft.AspNetCore.DataProtection; using Microsoft.AspNetCore.SignalR; using Microsoft.EntityFrameworkCore; using Microsoft.IdentityModel.Tokens; using Microsoft.OpenApi.Models; using System.Reflection; using System.Text; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddDbContext((provider, options) => { if (!builder.Environment.IsProduction()) options.EnableSensitiveDataLogging(); options.UseSqlite(builder.Configuration.GetConnectionString("SQLite"), opts => opts.UseQuerySplittingBehavior(QuerySplittingBehavior.SplitQuery)); }); builder.Services.Configure(builder.Configuration.GetSection("JwtSettings")); builder.Services.AddAuthorization(); builder.Services.AddAuthentication("Bearer").AddJwtBearer(o => { o.RequireHttpsMetadata = false; var secret = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["JwtSettings:Secret"] ?? string.Empty)); o.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters { NameClaimType = JwtClaimTypes.Name, RoleClaimType = JwtClaimTypes.Role, ValidateIssuer = true, ValidIssuer = builder.Configuration["JwtSettings:Issuer"], ValidateIssuerSigningKey = true, IssuerSigningKey = secret, ValidateAudience = true, ValidAudience = builder.Configuration["JwtSettings:Audience"], RequireExpirationTime = true, ValidateLifetime = true, ClockSkew = TimeSpan.FromSeconds(30) }; }); builder.Services.AddSingleton(); builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(options => { options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme { Description = "使用 JWT Bearer 模式进行授权。示例: \"Bearer {token}\"", Name = "Authorization", //Jwt default param name In = ParameterLocation.Header, //Jwt store address Type = SecuritySchemeType.ApiKey, //Security scheme type Scheme = "Bearer", BearerFormat = "JWT" }); options.AddSecurityRequirement(new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" }, }, Array.Empty() } }); }); builder.Services.AddMemoryCache(); var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(o => o.EnablePersistAuthorization()); } //app.UseHttpsRedirection(); app.SetupDatabase(); app.UseAuthorization(); app.MapControllers(); app.Run();