// This method gets called by the runtime. Use this method to add services to the container. // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 public void ConfigureServices(IServiceCollection services) { services.Configure <AppSettings>(Configuration.GetSection("AppSettings")); services.AddScoped <IAppSettings>(s => { return(s.GetService <IOptions <AppSettings> >().Value); }); services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>(); ScopesConfiguration.Configuration(services); services.AddMvc(); }
// This method gets called by the runtime. Use this method to add services to the container. // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 public void ConfigureServices(IServiceCollection services) { services.Configure <AppSettings>(Configuration.GetSection("AppSettings")); services.AddScoped <IAppSettings>(s => s.GetService <IOptions <AppSettings> >().Value); services.AddTransient <IEmailService, EmailService>(); services.TryAddSingleton <IHttpContextAccessor, HttpContextAccessor>(); ScopesConfiguration.Configuration(services); var signingConfigurations = new SigningConfigurations(); services.AddSingleton <ISigningConfigurations>(signingConfigurations); var tokenConfigurations = new TokenConfigurations(); new ConfigureFromConfigurationOptions <TokenConfigurations>( Configuration.GetSection("TokenConfigurations")).Configure(tokenConfigurations); services.AddSingleton <ITokenConfigurations>(tokenConfigurations); services.AddAuthentication(authOptions => { authOptions.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; authOptions.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; authOptions.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }).AddJwtBearer(bearerOptions => { var paramsValidation = bearerOptions.TokenValidationParameters; paramsValidation.IssuerSigningKey = signingConfigurations.Key; paramsValidation.ValidAudience = tokenConfigurations.Audience; paramsValidation.ValidIssuer = tokenConfigurations.Issuer; paramsValidation.ClockSkew = TimeSpan.Zero; paramsValidation.ValidateIssuer = true; paramsValidation.ValidateAudience = true; paramsValidation.ValidateLifetime = true; paramsValidation.ValidateIssuerSigningKey = true; bearerOptions.SaveToken = true; }); services.AddAuthorization(auth => { auth.AddPolicy("Bearer", new AuthorizationPolicyBuilder() .AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme) .RequireAuthenticatedUser().Build()); }); services.AddCors(c => c.AddPolicy("AllowSpecificOrigin", builder => { builder.WithOrigins("*") .AllowAnyMethod() .AllowAnyHeader() .AllowAnyOrigin() .AllowCredentials(); })); services.AddMvc(); services.AddRouting(); }