using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.IdentityModel.Tokens; using Modules.User.Application.Settings; using Modules.User.Domain.Gateways; using System.Text; namespace Modules.User.Application { public static class ServiceCollectionExtensions { public static IServiceCollection AddTokens(this IServiceCollection services, IConfigurationManager configuration, string jwtSettingsSection) { //Configuration services.AddOptions().Bind(configuration.GetSection(jwtSettingsSection)); services.AddHttpContextAccessor(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(options => { options.RequireHttpsMetadata = true; options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidIssuer = configuration.GetValue("JwtSettings:Issuer"), ValidateAudience = true, ValidAudience = configuration.GetValue("JwtSettings:Audience"), ValidateLifetime = true, ClockSkew = TimeSpan.Zero, IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(configuration.GetValue("JwtSettings:SecurityKey")!)), ValidateIssuerSigningKey = true }; }); services.AddAuthorization(); return services; } } }