using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using TCM_API.Authorization; using TCM_API.Helpers; using System.Configuration; using TCM_API.Services; using Microsoft.IdentityModel.Tokens; using System.Text; using Microsoft.OpenApi.Models; var builder = WebApplication.CreateBuilder(args); //在 ASP.NET Core 中啟用 CORS (跨原始來源要求) builder.Services.AddCors(); // Add services to the container. builder.Services.AddControllers(); // 連線PostgreSQL資料庫 var connectionString = "Server=leovip125.ddns.net;UserID=postgres;Password=vip125;Database=TCM;port=5432;Search Path=public;CommandTimeout=1800"; builder.Services.AddDbContext(opt => opt.UseNpgsql(connectionString)); //身分驗證 //add services to DI container { var services = builder.Services; services.AddCors(); services.AddControllers(); // configure strongly typed settings object services.Configure(builder.Configuration.GetSection("AppSettings")); // 配置JWT身份验证 var jwtSettings = builder.Configuration.GetSection("AppSettings").Get(); services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = false, ValidateAudience = false, ValidateIssuerSigningKey = true, //ValidIssuer = "your_issuer", // ValidAudience = "your_audience", ClockSkew = TimeSpan.Zero, IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSettings.Secret)) }; }); services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "TCM_API", Version = "v1" }); // Configure Swagger to use JWT authentication c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme { Description = "JWT Authorization header using the Bearer scheme", Name = "Authorization", In = ParameterLocation.Header, Type = SecuritySchemeType.ApiKey, Scheme = "Bearer" }); // 将JWT令牌作为所有端点的要求添加到Swagger文档 //ˇc.OperationFilter(); c.AddSecurityRequirement(new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } }, new string[] { } } }); }); // configure DI for application services services.AddScoped(); services.AddScoped(); // 注册 HttpClient 服务 services.AddHttpClient(); } // 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(); var app = builder.Build(); //身分驗證 // configure HTTP request pipeline { // global cors policy app.UseCors(x => x .AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader()); // custom jwt auth middleware app.UseMiddleware(); app.MapControllers(); } // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); //app.UseSwaggerUI(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "TCM_API"); }); } app.UseSwagger(); //app.UseSwaggerUI(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "TCM_API"); }); //在 ASP.NET Core 中啟用 CORS (跨原始來源要求) // Shows UseCors with CorsPolicyBuilder. app.UseCors(builder => { builder.AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader(); }); app.UseHttpsRedirection(); app.UseAuthentication(); app.UseAuthorization(); app.MapControllers(); app.Run();