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; using MyCSharp.HttpUserAgentParser.MemoryCache.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; 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.TryAddEnumerable(ServiceDescriptor.Scoped().) //services.TryAddEnumerable(ServiceDescriptor.Scoped()); services.TryAddScoped(); services.AddHttpUserAgentMemoryCachedParser(); //services.AddHttpUserAgentParserAccessor(); // registers IHttpUserAgentParserAccessor, uses IHttpUserAgentParserProvider 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; } //public static IServiceCollection AddTokensCookie(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(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(options => // { // options.ClaimsIssuer = configuration.GetValue("JwtSettings:Issuer"); // options.Cookie.Name = "auth_cookie"; // options.Cookie.HttpOnly = true; // //options.Cookie.SameSite = Microsoft.AspNetCore.Http.SameSiteMode.Strict; // options.Cookie.SameSite = Microsoft.AspNetCore.Http.SameSiteMode.None; // //options.ke = Microsoft.AspNetCore.Http.SameSiteMode.Strict; // options.TokenValidationParameters = new TokenValidationParameters // { // ValidateIssuer = true, // 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(); // services.AddMediaStorage(); // return services; //} } }