Beispiel #1
0
        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
                };
            });
        }
Beispiel #2
0
        /// <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);
            });
        }