diff --git a/CleanArchitecture/CleanArchitecture.Identity/IdentityServiceRegistration.cs b/CleanArchitecture/CleanArchitecture.Identity/IdentityServiceRegistration.cs new file mode 100644 index 0000000..7809107 --- /dev/null +++ b/CleanArchitecture/CleanArchitecture.Identity/IdentityServiceRegistration.cs @@ -0,0 +1,51 @@ +using CleanArchitecture.Application.Contracts.Identity; +using CleanArchitecture.Application.Models.Identity; +using CleanArchitecture.Identity.Models; +using CleanArchitecture.Identity.Services; +using Microsoft.AspNetCore.Authentication.JwtBearer; +using Microsoft.AspNetCore.Identity; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.IdentityModel.Tokens; +using System.Text; + +namespace CleanArchitecture.Identity +{ + public static class IdentityServiceRegistration + { + public static IServiceCollection ConfigureIdentityServices(this IServiceCollection services, IConfiguration configuration) + { + services.Configure(configuration.GetSection("JwtSettings")); + + var dbConnectionString = configuration.GetConnectionString("IdentityConnectionString"); + services.AddDbContext(options => + options.UseMySql(dbConnectionString, ServerVersion.AutoDetect(dbConnectionString), + b => b.MigrationsAssembly(typeof(CleanArchitectureIdentityDbContext).Assembly.FullName))); + + services.AddIdentity().AddEntityFrameworkStores().AddDefaultTokenProviders(); + + services.AddTransient(); + + services.AddAuthentication(options => + { + options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; + options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; + }).AddJwtBearer(options => + { + options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters { + ValidateIssuerSigningKey = true, + ValidateIssuer = true, + ValidateAudience = true, + ValidateLifetime = true, + ClockSkew = TimeSpan.Zero, + ValidIssuer = configuration["JwtSettings:Issuer"], + ValidAudience = configuration["JwtSettings:Audience"], + IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(configuration["JwtSettings:Key"]!)) + }; + }); + + return services; + } + } +}