private void ConfigureAuthentication(IServiceCollection services) { var config = new KeycloakConfiguration(); Configuration.GetSection(nameof(KeycloakConfiguration)).Bind(config); config.Validate(); services.AddAuthentication(x => { x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }) .AddJwtBearer(opt => { opt.RequireHttpsMetadata = false; opt.Authority = config.Authority; opt.TokenValidationParameters = new TokenValidationParameters { RequireSignedTokens = true, RequireExpirationTime = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuer = true, ValidAudience = config.RequiredAudience }; }); }
/// <summary> /// Configure Services /// </summary> /// <param name="services">Collection services</param> public void ConfigureServices(IServiceCollection services) { services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Latest); //IP rate limitation services.AddMemoryCache(); services.Configure <IpRateLimitOptions>(Configuration.GetSection("IpRateLimiting")); services.Configure <IpRateLimitPolicies>(Configuration.GetSection("IpRateLimitPolicies")); //Other configuration var keycloackConfiguration = new KeycloakConfiguration(); Configuration.Bind("BackGroundThreadSettings", new BackGroundThreadConfiguration()); Configuration.Bind("BusinessLogicSettings", new BusinessLogicConfiguration()); Configuration.Bind("MiddlewareContextSettings", new MiddlewareContextSettings()); Configuration.Bind("HPCConnectionFrameworkSettings", new HPCConnectionFrameworkConfiguration()); Configuration.Bind("ApplicationAPISettings", new ApplicationAPIConfiguration()); Configuration.Bind("KeycloakSettings", keycloackConfiguration); Configuration.Bind("OpenStackSettings", new OpenStackSettings()); services.AddSingleton <IIpPolicyStore, MemoryCacheIpPolicyStore>(); services.AddSingleton <IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>(); services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>(); services.AddSingleton <IRateLimitConfiguration, RateLimitConfiguration>(); services.AddSingleton <IProcessingStrategy, AsyncKeyLockProcessingStrategy>(); services.AddSingleton(keycloackConfiguration); //Maybe Interface //CORS services.AddCors(options => { options.AddPolicy(name: _allowSpecificOrigins, builder => { builder.WithOrigins(ApplicationAPIConfiguration.AllowedHosts) .AllowAnyHeader() .AllowAnyMethod(); }); }); services.AddControllers().AddJsonOptions(options => { options.JsonSerializerOptions.PropertyNamingPolicy = null; }); //SwaggerGen services.AddSwaggerGen(gen => { gen.SwaggerDoc(SwaggerConfiguration.Version, new OpenApiInfo { Version = SwaggerConfiguration.Version, Title = SwaggerConfiguration.Title, Description = SwaggerConfiguration.Description, TermsOfService = new Uri(SwaggerConfiguration.TermOfUsageUrl), License = new OpenApiLicense() { Name = SwaggerConfiguration.License, Url = new Uri(SwaggerConfiguration.LicenseUrl), }, Contact = new OpenApiContact() { Name = SwaggerConfiguration.ContactName, Email = SwaggerConfiguration.ContactEmail, Url = new Uri(SwaggerConfiguration.ContactUrl), } }); var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile); gen.IncludeXmlComments(xmlPath); }); }