public void ConfigureServices(IServiceCollection services) { ConfigureDatabase.ConfigureDependencyDatabases(services); ConfigureService.ConfigureDependencyServices(services); ConfigureRepository.ConfigureDependencyRepositories(services); ConfigureMapping.ConfigureDependencyMapping(services); var signingConfiguration = new SigningConfiguration(); var tokenConfiguration = Configuration.GetSection("Token").Get <TokenConfiguration>(); services.AddSingleton(signingConfiguration); services.AddSingleton(tokenConfiguration); services.AddAuthentication(options => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }).AddJwtBearer(options => { var validation = options.TokenValidationParameters; validation.IssuerSigningKey = signingConfiguration.Key; validation.ValidAudience = tokenConfiguration.Audience; validation.ValidIssuer = tokenConfiguration.Issuer; validation.ValidateIssuerSigningKey = true; validation.ValidateLifetime = true; validation.ClockSkew = TimeSpan.Zero; }); services.AddAuthorization(options => { options.DefaultPolicy = new AuthorizationPolicyBuilder() .AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme) .RequireAuthenticatedUser() .Build(); }); services.AddSwaggerGen(config => { config.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" }); config.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme { In = ParameterLocation.Header, Description = "Token jwt", Name = "Authorization", Type = SecuritySchemeType.ApiKey }); config.AddSecurityRequirement(new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Reference = new OpenApiReference { Id = "Bearer", Type = ReferenceType.SecurityScheme } }, new string[0] } }); }); services.AddControllers(); }