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();
}
}
}