using Lada.Framework.Data.Domains.Identity; using Lada.Framework.Data.Mappings.DbContexts; using Lada.Framework.Infrastructures.AppSettings; using Ladaer.BackEnd.Infrastructures.AppSettings; using Ladaer.BackEnd.Infrastructures.Authorization; using Ladaer.BackEnd.Infrastructures.IdentityConfigs; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Identity; using Microsoft.EntityFrameworkCore.Metadata.Internal; using Microsoft.IdentityModel.Tokens; using System.Security.Claims; using System.Text; namespace Ladaer.BackEnd.Infrastructures.Startup { /// /// L?p m? r?ng d? dang ky c c d?ch v? b?o m?t. /// public static class SecurityRegister { /// /// Dang ky c c d?ch v? b?o m?t. /// /// D?i tu?ng IServiceCollection. /// D?i tu?ng IConfiguration. public static void RegisterSecurityServices(this IServiceCollection services, IConfiguration configuration) { var autConfig = configuration.GetSection("AutConfig").Get(); var jwtSettings = configuration.GetSection("JwtSettings").Get(); var key = Encoding.UTF8.GetBytes(jwtSettings.Secret); services.AddIdentity( options => { #region Password settings // Password settings options.Password.RequireDigit = false; options.Password.RequiredLength = 6; options.Password.RequireNonAlphanumeric = false; options.Password.RequireUppercase = false; options.Password.RequireLowercase = false; #endregion options.Tokens.PasswordResetTokenProvider = TokenOptions.DefaultEmailProvider; options.Lockout.AllowedForNewUsers = true; options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5); options.Lockout.MaxFailedAccessAttempts = 5; options.User.AllowedUserNameCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._"; options.User.RequireUniqueEmail = true; }) .AddEntityFrameworkStores() .AddErrorDescriber() .AddDefaultTokenProviders(); services.AddAuthentication(options => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }).AddJwtBearer(options => { options.RequireHttpsMetadata = false; options.SaveToken = true; options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(key), ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidIssuer = jwtSettings.Issuer, ValidAudience = jwtSettings.Audience }; }); // Dang ky Authorization v?i Founder Bypass Handler services.AddAuthorization(); services.AddScoped(); } /// /// Dang ky c c middleware b?o m?t. /// /// D?i tu?ng IApplicationBuilder. public static void RegisterSecurity(this IApplicationBuilder app) { app.UseAuthentication(); app.UseAuthorization(); } } }