using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.IdentityModel.Tokens; using QYZH.InteractiveMagazine.Infrastructure.Middleware; using QYZH.InteractiveMagazine.Models.Settings; using System.Text; namespace QYZH.InteractiveMagazine.Infrastructure.Extensions; /// /// 统一服务注册扩展 /// public static class DependencyInjectionExtensions { /// /// 注册基础设施服务 /// /// 服务集合 /// 配置 public static void AddInfrastructureServices(this IServiceCollection services, IConfiguration configuration) { AddJwtAuthentication(services, configuration); services.AddTransient(); services.AddTransient(); } /// /// 配置JWT认证 /// /// 服务集合 /// 配置 private static void AddJwtAuthentication(IServiceCollection services, IConfiguration configuration) { var jwtSettings = configuration.GetSection("JwtSettings").Get()!; services.AddSingleton(jwtSettings); services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidIssuer = jwtSettings.Issuer, ValidateAudience = true, ValidAudience = jwtSettings.Audience, ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSettings.SecretKey!)), ValidateLifetime = true, ClockSkew = TimeSpan.Zero }; }); } }