// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddControllers(); #region Services application services.Add(new ServiceDescriptor(typeof(IResponse <User>), new Response <User>())); services.Add(new ServiceDescriptor(typeof(IToken), new Token())); services.AddTransient <IEmailSender, EmailSender>(); // Auto Mapper Configurations var mapperConfig = new MapperConfiguration(mc => { mc.AddProfile(new MappingProfile()); }); IMapper mapper = mapperConfig.CreateMapper(); services.AddSingleton(mapper); #endregion #region AutoMapper services.AddAutoMapper(typeof(Startup)); services.AddControllersWithViews(); #endregion #region Swagger //services.AddSwaggerGen(c => //{ // c.IncludeXmlComments(string.Format(@"{0}\blasa-access-management.xml", System.AppDomain.CurrentDomain.BaseDirectory)); // c.SwaggerDoc("v1", new OpenApiInfo // { // Version = "v1", // Title = "blasa-access-management", // }); //}); services.AddSwaggerGen(c => { c.IncludeXmlComments(string.Format(@"{0}\blasa-access-management.xml", System.AppDomain.CurrentDomain.BaseDirectory)); c.SwaggerDoc("v1", new OpenApiInfo { Version = "v1", Title = "blasa-access-management", }); c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme { Description = @"JWT Authorization header using the Bearer scheme. \r\n\r\n Enter 'Bearer' [space] and then your token in the text input below. \r\n\r\nExample: 'Bearer 12345abcdef'", Name = "Authorization", In = ParameterLocation.Header, Type = SecuritySchemeType.ApiKey, Scheme = "Bearer" }); c.AddSecurityRequirement(new OpenApiSecurityRequirement() { { new OpenApiSecurityScheme { Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" }, Scheme = "oauth2", Name = "Bearer", In = ParameterLocation.Header, }, new List <string>() } }); }); #endregion #region DBcontext //services.AddDbContext<ApplicationContext>(options => // options.UseSqlServer( // Configuration.GetConnectionString("DefaultConnection"), // b => b.MigrationsAssembly(typeof(ApplicationContext).Assembly.FullName))); #endregion #region API Versioning // Add API Versioning to the Project services.AddApiVersioning(config => { // Specify the default API Version as 1.0 config.DefaultApiVersion = new ApiVersion(1, 0); // If the client hasn't specified the API version in the request, use the default API version number config.AssumeDefaultVersionWhenUnspecified = true; // Advertise the API versions supported for the particular endpoint config.ReportApiVersions = true; }); #endregion //dependency injection of Infrastructure //services.AddPersistence(Configuration); DependencyInjectionContainer.AddPersistenceAuth(services, Configuration); //dependency injection of Application layer services.AddApplication(); // For Identity services.AddIdentity <User, IdentityRole>(opt => { opt.Password.RequiredLength = 8; opt.Password.RequireDigit = false; opt.Password.RequireUppercase = false; opt.Password.RequireNonAlphanumeric = false; //opt.User.RequireUniqueEmail = true; opt.User.RequireUniqueEmail = false; //opt.SignIn.RequireConfirmedEmail = false; }) //services.AddIdentity<ApplicationUser, IdentityRole>() .AddEntityFrameworkStores <AuthentificationDbContext>() .AddDefaultTokenProviders(); // Adding Authentication services.AddAuthentication(options => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; }) //Adding Jwt Bearer old .AddJwtBearer(options => { options.SaveToken = true; options.RequireHttpsMetadata = false; options.TokenValidationParameters = new TokenValidationParameters() { ValidateIssuer = false, ValidateAudience = false, //ValidAudience = Configuration["JWT:ValidAudience"], //ValidIssuer = Configuration["JWT:ValidIssuer"], IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["JWT:Secret"])) }; }); ////Adding Athentication - JWT //services.AddAuthentication(options => //{ // options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; // options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; //}) // .AddJwtBearer(o => // { // o.RequireHttpsMetadata = false; // o.SaveToken = false; // o.TokenValidationParameters = new TokenValidationParameters // { // ValidateIssuerSigningKey = true, // ValidateIssuer = true, // ValidateAudience = true, // ValidateLifetime = true, // ClockSkew = TimeSpan.Zero, // ValidIssuer = Configuration["JWT:Issuer"], // ValidAudience = Configuration["JWT:Audience"], // IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["JWT:Key"])) // }; // }); }