示例#1
0
 public AuthTypeResolveContributor(IHttpContextAccessor httpContextAccessor, IClientPolicyStore clientPolicyStore, ClientRateLimitOptions clientOptions, ClientRateLimitPolicies clientPolicies)
 {
     _clientOptions       = clientOptions;
     _clientPolicies      = clientPolicies;
     _httpContextAccessor = httpContextAccessor;
     _clientPolicyStore   = clientPolicyStore;
 }
示例#2
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddOptions();
            services.AddMemoryCache();

            //configure ip rate limiting middle-ware
            services.Configure <IpRateLimitOptions>(Configuration.GetSection("IpRateLimiting"));
            services.Configure <IpRateLimitPolicies>(Configuration.GetSection("IpRateLimitPolicies"));
            services.AddSingleton <IIpPolicyStore, MemoryCacheIpPolicyStore>();
            services.AddSingleton <IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>();

            //configure client rate limiting middleware
            services.Configure <ClientRateLimitOptions>(Configuration.GetSection("ClientRateLimiting"));
            services.Configure <ClientRateLimitPolicies>(Configuration.GetSection("ClientRateLimitPolicies"));
            services.AddSingleton <IClientPolicyStore, MemoryCacheClientPolicyStore>();
            //services.AddSingleton<IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>();

            //configure client rate limiting middleware
            services.Configure <UrlRateLimitOptions>(Configuration.GetSection("UrlRateLimiting"));
            //services.AddSingleton<IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>();

            var opt = new ClientRateLimitOptions();

            ConfigurationBinder.Bind(Configuration.GetSection("ClientRateLimiting"), opt);

            // Add framework services.
            services.AddMvc();
        }
示例#3
0
        public void ConfigureServices(IServiceCollection services)
        {
            services.Configure <SiteSettings>(Configuration.GetSection(nameof(SiteSettings)));

            services.Configure <IdentitySiteSettings>(Configuration.GetSection(nameof(IdentitySiteSettings)));

            services.InitializeAutoMapper();

            services.AddDbContext(Configuration);

            //services.AddCustomIdentity(_siteSetting.IdentitySettings);

            // Adds all of the ASP.NET Core Identity related services and configurations at once.
            services.AddCustomIdentityServices(_identitySiteSettings);

            services.AddMinimalMvc();

            services.AddDNTCommonWeb();
            services.AddCloudscribePagination();

            services.AddJwtAuthentication(_siteSetting.JwtSettings);

            services.AddCustomApiVersioning();

            services.AddMemoryCache();

            services.AddSwagger();

            services.AddHttpCacheHeaders(
                (expirationModelOptions) =>
            {
                expirationModelOptions.MaxAge = 600;
            },
                (validationModelOptions) =>
            {
                validationModelOptions.MustRevalidate = true;
            });

            // configure ip rate limiting middle-ware
            services.Configure <IpRateLimitOptions>(Configuration.GetSection("IpRateLimiting"));
            services.Configure <IpRateLimitPolicies>(Configuration.GetSection("IpRateLimitPolicies"));
            services.AddSingleton <IIpPolicyStore, MemoryCacheIpPolicyStore>();
            services.AddSingleton <IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>();

            // configure client rate limiting middleware
            services.Configure <ClientRateLimitOptions>(Configuration.GetSection("ClientRateLimiting"));
            services.Configure <ClientRateLimitPolicies>(Configuration.GetSection("ClientRateLimitPolicies"));
            services.AddSingleton <IClientPolicyStore, MemoryCacheClientPolicyStore>();
            //services.AddSingleton<IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>();

            var opt = new ClientRateLimitOptions();

            Configuration.GetSection("ClientRateLimiting").Bind(opt);

            services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>();

            services.AddSingleton <IRateLimitConfiguration, RateLimitConfiguration>();

            //services.AddElmah(Configuration, _siteSetting);
        }
示例#4
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            // needed to load configuration from appsettings.json
            services.AddOptions();

            // needed to store rate limit counters and ip rules
            services.AddMemoryCache();

            // configure ip rate limiting middle-ware
            services.Configure <IpRateLimitOptions>(Configuration.GetSection("IpRateLimiting"));
            services.Configure <IpRateLimitPolicies>(Configuration.GetSection("IpRateLimitPolicies"));
            services.AddSingleton <IIpPolicyStore, MemoryCacheIpPolicyStore>();
            services.AddSingleton <IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>();

            // configure client rate limiting middleware
            services.Configure <ClientRateLimitOptions>(Configuration.GetSection("ClientRateLimiting"));
            services.Configure <ClientRateLimitPolicies>(Configuration.GetSection("ClientRateLimitPolicies"));
            services.AddSingleton <IClientPolicyStore, MemoryCacheClientPolicyStore>();
            //services.AddSingleton<IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>();

            var opt = new ClientRateLimitOptions();

            ConfigurationBinder.Bind(Configuration.GetSection("ClientRateLimiting"), opt);

            services.AddMvc().AddNewtonsoftJson();

            // https://github.com/aspnet/Hosting/issues/793
            // the IHttpContextAccessor service is not registered by default.
            // the clientId/clientIp resolvers use it.
            services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>();

            // configure the resolvers
            services.AddSingleton <IRateLimitConfiguration, RateLimitConfiguration>();
        }
示例#5
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            // needed to load configuration from appsettings.json
            services.AddOptions();

            // needed to store rate limit counters and ip rules
            services.AddMemoryCache();

            //configure ip rate limiting middle-ware
            services.Configure <IpRateLimitOptions>(Configuration.GetSection("IpRateLimiting"));
            services.Configure <IpRateLimitPolicies>(Configuration.GetSection("IpRateLimitPolicies"));
            services.AddSingleton <IIpPolicyStore, MemoryCacheIpPolicyStore>();
            services.AddSingleton <IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>();

            //configure client rate limiting middleware
            services.Configure <ClientRateLimitOptions>(Configuration.GetSection("ClientRateLimiting"));
            services.Configure <ClientRateLimitPolicies>(Configuration.GetSection("ClientRateLimitPolicies"));
            services.AddSingleton <IClientPolicyStore, MemoryCacheClientPolicyStore>();
            //services.AddSingleton<IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>();

            var opt = new ClientRateLimitOptions();

            ConfigurationBinder.Bind(Configuration.GetSection("ClientRateLimiting"), opt);

            services.AddMvc().AddNewtonsoftJson();
        }
 public ClientRateLimitProcessor(ClientRateLimitOptions options,
                                 IRateLimitCounterStore counterStore,
                                 IClientPolicyStore policyStore)
     : base(options, counterStore)
 {
     _options     = options;
     _policyStore = policyStore;
 }
示例#7
0
 public ClientRateLimitProcessor(
     ClientRateLimitOptions options,
     ICacheManager cacheManager,
     IRateLimitConfiguration config)
     : base(cacheManager, options, new ClientCounterKeyBuilder(), config)
 {
     _options = options;
 }
 public MemoryCacheClientPolicyStore(
     IMemoryCache cache,
     ClientRateLimitOptions options   = null,
     ClientRateLimitPolicies policies = null) : base(cache)
 {
     _options  = options;
     _policies = policies;
 }
示例#9
0
 public AspNetCoreRateLimitMiddleware(
     RequestDelegate next,
     IOptions <ClientRateLimitOptions> optionsAccessor,
     IClientPolicyStore clientPolicyStore)
 {
     this.next          = next ?? throw new ArgumentNullException(nameof(next));
     _options           = optionsAccessor.Value;
     _clientPolicyStore = clientPolicyStore;
 }
示例#10
0
 public ClientPolicyStore(
     ICacheManager cacheManager,
     IOptions <ClientRateLimitOptions> options   = null,
     IOptions <ClientRateLimitPolicies> policies = null)
 {
     _cacheManager = cacheManager;
     _options      = options?.Value;
     _policies     = policies?.Value;
 }
        public RateLimitConfiguration(
            IpRateLimitOptions ipOptions,
            ClientRateLimitOptions clientOptions)
        {
            IpRateLimitOptions     = ipOptions;
            ClientRateLimitOptions = clientOptions;

            RegisterResolvers();
        }
 public ClientRateLimitProcessor(
     ClientRateLimitOptions options,
     IRateLimitCounterStore counterStore,
     IClientPolicyStore policyStore,
     IRateLimitConfiguration config)
     : base(options, counterStore, new ClientCounterKeyBuilder(options), config)
 {
     _options     = options;
     _policyStore = policyStore;
 }
        public ClientRateLimitProcessor(ClientRateLimitOptions options,
                                        IRateLimitCounterStore counterStore,
                                        IClientPolicyStore policyStore)
        {
            _options      = options;
            _counterStore = counterStore;
            _policyStore  = policyStore;

            _core = new RateLimitCore(false, options, _counterStore);
        }
示例#14
0
 public CustomRateLimitConfiguration(IHttpContextAccessor httpContextAccessor, IClientPolicyStore clientPolicyStore, IOptions <IpRateLimitOptions> ipOptions, IOptions <ClientRateLimitOptions> clientOptions, IOptions <ClientRateLimitPolicies> clientPolicies)
 {
     IpRateLimitOptions      = ipOptions?.Value;
     ClientRateLimitOptions  = clientOptions?.Value;
     ClientRateLimitPolicies = clientPolicies?.Value;
     HttpContextAccessor     = httpContextAccessor;
     ClientPolicyStore       = clientPolicyStore;
     ClientResolvers         = new List <IClientResolveContributor>();
     IpResolvers             = new List <IIpResolveContributor>();
     RegisterResolvers();
 }
示例#15
0
 public ClientRateLimitCounterStore(
     IOptions <ClientRateLimitOptions> options,
     IClientRateLimitProcessor clientRateLimitProcessor,
     IRateLimitCounterStore counterStore,
     IClientPolicyStore policyStore)
 {
     _options      = options.Value;
     _processor    = clientRateLimitProcessor;
     _counterStore = counterStore;
     _core         = new RateLimitCore(false, options.Value, _counterStore);
 }
        public MemoryCacheClientPolicyStore(IMemoryCache memoryCache,
                                            ClientRateLimitOptions options,
                                            ClientRateLimitPolicies policies)
        {
            _memoryCache = memoryCache;

            //save client rules defined in appsettings in cache on startup
            if (options != null && policies != null && policies != null && policies.ClientRules != null)
            {
                foreach (var rule in policies.ClientRules)
                {
                    Set($"{options.ClientPolicyPrefix}_{rule.ClientId}", new ClientRateLimitPolicy {
                        ClientId = rule.ClientId, Rules = rule.Rules
                    });
                }
            }
        }
        static ClientRateLimit()
        {
            if (Setting.Configuration?.IpRateLimiting == null)
            {
                return;
            }

            Logger = Factory.Logger.Value;

            Options = Setting.Configuration.ClientRateLimiting;

            Policies = Setting.Configuration.ClientRateLimitPolicies;

            MemoryCache = new MemoryCacheManager();

            var rateLimitCounterStore = Factory.RateLimitCounterStore.Value;

            IClientPolicyStore clientPolicyStore = new MemoryCacheClientPolicyStore(MemoryCache, Options, Policies);

            Processor = new ClientRateLimitProcessor(Options, rateLimitCounterStore, clientPolicyStore);

            Configurationed = true;
        }
示例#18
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddOptions();
            services.AddMemoryCache();

            //configure ip rate limiting middle-ware
            services.Configure <IpRateLimitOptions>(Configuration.GetSection("IpRateLimiting"));
            services.Configure <IpRateLimitPolicies>(Configuration.GetSection("IpRateLimitPolicies"));
            services.AddSingleton <IIpPolicyStore, MemoryCacheIpPolicyStore>();
            services.AddSingleton <IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>();

            //configure client rate limiting middleware
            services.Configure <ClientRateLimitOptions>(Configuration.GetSection("ClientRateLimiting"));
            services.Configure <ClientRateLimitPolicies>(Configuration.GetSection("ClientRateLimitPolicies"));
            services.AddSingleton <IClientPolicyStore, MemoryCacheClientPolicyStore>();
            //services.AddSingleton<IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>();

            //configure client rate limiting middleware
            services.Configure <UserRateLimitOptions>(Configuration.GetSection("UserRateLimiting"));
            services.Configure <UserRateLimitPolicies>(Configuration.GetSection("UserRateLimitPolicies"));
            services.AddSingleton <IUserPolicyStore, MemoryCacheUserPolicyStore>();

            var opt = new ClientRateLimitOptions();

            ConfigurationBinder.Bind(Configuration.GetSection("ClientRateLimiting"), opt);

            var optUser = new UserRateLimitOptions();

            ConfigurationBinder.Bind(Configuration.GetSection("UserRateLimiting"), optUser);

            services.AddTransient <IPeopleRepository, PeopleRepository>();
            services.AddTransient <IPersonCarRepository, PersonCarRepository>();
            services.AddTransient <ICarRepository, CarRepository>();

            // Add DbContext
            var conStr = Configuration["Data:ApplicationDb:ConnectionString"];

            services.AddScoped((_) => new ApplicationDbContext(conStr));

            // Add framework services.
            //services.AddMvc();
            services.AddMvc().AddJsonOptions(options => {
                options.SerializerSettings.ContractResolver      = new CamelCasePropertyNamesContractResolver();
                options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
            });

            services.AddSwaggerGen();

            services.ConfigureSwaggerGen(options =>
            {
                options.SingleApiVersion(new Info
                {
                    Version        = "v1",
                    Title          = "Swashbuckle Test API",
                    Description    = "A simple example ASP.NET Core Web API",
                    TermsOfService = "None",
                    Contact        = new Contact {
                        Name = "Darren Schwarz", Email = "*****@*****.**", Url = "http://www.darrenschwarz.com"
                    },
                    License = new License {
                        Name = "Use under LICX", Url = "http://url.com"
                    }
                });

                //Determine base path for the application.
                var basePath = PlatformServices.Default.Application.ApplicationBasePath;

                //Set the comments path for the swagger json and ui.
                options.IncludeXmlComments(basePath + "\\SwashbuckleExample.xml");
            });

            services.AddAuthentication(options => new IISOptions()
            {
                ForwardWindowsAuthentication = true
            });

            services.AddAuthorization(options =>
            {
                options.AddPolicy("IOAdmin", policy => policy.Requirements.Add(new RoleRequirement("IOAdmin")));
                options.AddPolicy("SomeOther", policy => policy.Requirements.Add(new RoleRequirement("SomeOther")));
            });

            services.AddSingleton <IAuthorizationHandler, RoleHandler>();

            var r = Configuration.GetSection("Role");
        }
示例#19
0
 public ClientRateLimitController1(IOptions <ClientRateLimitOptions> optionsAccessor, IClientPolicyStore clientPolicyStore)
 {
     _options           = optionsAccessor.Value;
     _clientPolicyStore = clientPolicyStore;
 }
示例#20
0
 public UserController(IUserService userService, IClientPolicyStore clientPolicyStore, IOptions <ClientRateLimitOptions> clientRateOptions)
 {
     this.userService            = userService;
     this.clientPolicyStore      = clientPolicyStore;
     this.clientRateLimitOptions = clientRateOptions?.Value;
 }
 public HeaderClientRequestStore(IOptions <ClientRateLimitOptions> options)
 {
     _options = options.Value;
 }
 public ClientCounterKeyBuilder(ClientRateLimitOptions options)
 {
     _options = options;
 }
示例#23
0
文件: Startup.cs 项目: duyxaoke/DEV
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext <ApplicationDbContext>(options =>
            {
                // Configure the context to use Microsoft SQL Server.
                options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"));
            });

            // Register the Identity services.
            services.AddIdentity <ApplicationUser, ApplicationRole>()
            .AddEntityFrameworkStores <ApplicationDbContext>()
            .AddDefaultTokenProviders();


            services.ConfigureApplicationCookie(options =>
            {
                options.Events.OnRedirectToLogin = ctx =>
                {
                    if (ctx.Request.Path.StartsWithSegments("/api") &&
                        ctx.Response.StatusCode == (int)HttpStatusCode.OK)
                    {
                        ctx.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
                        ctx.Response.WriteAsync("{\"success\" : false, \"errors\" : \"Unauthorized\"}");
                    }
                    else
                    {
                        ctx.Response.Redirect(ctx.RedirectUri);
                    }
                    return(Task.CompletedTask);
                };
            });

            services.AddAutoMapperSetup();


            services.AddOptions();

            services.AddResponseCompression();
            services.AddMemoryCache();

            //configure ip rate limiting middle-ware
            services.Configure <IpRateLimitOptions>(Configuration.GetSection("IpRateLimiting"));
            services.Configure <IpRateLimitPolicies>(Configuration.GetSection("IpRateLimitPolicies"));
            services.AddSingleton <IIpPolicyStore, MemoryCacheIpPolicyStore>();
            services.AddSingleton <IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>();

            //configure client rate limiting middleware
            services.Configure <ClientRateLimitOptions>(Configuration.GetSection("ClientRateLimiting"));
            services.Configure <ClientRateLimitPolicies>(Configuration.GetSection("ClientRateLimitPolicies"));
            services.AddSingleton <IClientPolicyStore, MemoryCacheClientPolicyStore>();
            //services.AddSingleton<IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>();

            var opt = new ClientRateLimitOptions();

            ConfigurationBinder.Bind(Configuration.GetSection("ClientRateLimiting"), opt);

            //.AddJsonOptions(options =>
            //{
            //    options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
            //});

            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new Info {
                    Title = "API", Version = "v1"
                });

                // Swagger 2.+ support
                var security = new Dictionary <string, IEnumerable <string> >
                {
                    { "Bearer", new string[] { } },
                };

                c.AddSecurityDefinition("Bearer", new ApiKeyScheme
                {
                    Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
                    Name        = "Authorization",
                    In          = "header",
                    Type        = "apiKey"
                });
                c.AddSecurityRequirement(security);
            });

            // Adding MediatR for Domain Events and Notifications
            services.AddMediatR(typeof(Startup));

            // .NET Native DI Abstraction
            RegisterServices(services);
            services.AddCors();

            // New instance every time, only configuration class needs so its ok
            services.AddTransient <ApplicationDbContext>();
            services.AddScoped <ApiExceptionFilter>();
            services.AddTransient <IEmailSender, EmailSender>();
            services.AddAuthentication("Bearer")
            .AddIdentityServerAuthentication(options =>
            {
                options.Authority            = "http://localhost:50000";
                options.RequireHttpsMetadata = false;
                options.ApiName         = "Api1";
                options.SupportedTokens = SupportedTokens.Both;
            });
            services.AddMvcCore()
            .AddAuthorization(options => options.AddPolicy("Administrator", policy => policy.RequireClaim("role", "Administrator")))
            .AddJsonFormatters()
            .AddJsonOptions(options =>
            {
                options.SerializerSettings.ContractResolver
                    = new Newtonsoft.Json.Serialization.DefaultContractResolver();
            })
            .AddApiExplorer();
        }
示例#24
0
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext <LibraryDbContext>(options =>
                                                     options.UseSqlServer(this.Configuration.GetConnectionString("DefaultConnection")));

            services.AddSingleton <IFileProvider>(
                new PhysicalFileProvider(
                    Path.Combine(Directory.GetCurrentDirectory(), RootFolderName)));

            services
            .AddIdentity <User, IdentityRole>(options =>
            {
                options.SignIn.RequireConfirmedEmail    = true;
                options.Password.RequireDigit           = false;
                options.Password.RequireLowercase       = false;
                options.Password.RequireNonAlphanumeric = false;
                options.Password.RequireUppercase       = false;
            })
            .AddEntityFrameworkStores <LibraryDbContext>()
            .AddDefaultTokenProviders();

            services.AddOptions();
            services.AddMemoryCache();

            //configure ip rate limiting middle-ware
            services.Configure <IpRateLimitOptions>(Configuration.GetSection("IpRateLimiting"));
            services.Configure <IpRateLimitPolicies>(Configuration.GetSection("IpRateLimitPolicies"));
            services.AddSingleton <IIpPolicyStore, MemoryCacheIpPolicyStore>();
            services.AddSingleton <IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>();

            //configure client rate limiting middleware
            services.Configure <ClientRateLimitOptions>(Configuration.GetSection("ClientRateLimiting"));
            services.Configure <ClientRateLimitPolicies>(Configuration.GetSection("ClientRateLimitPolicies"));
            services.AddSingleton <IClientPolicyStore, MemoryCacheClientPolicyStore>();

            var opt = new ClientRateLimitOptions();

            ConfigurationBinder.Bind(Configuration.GetSection("ClientRateLimiting"), opt);

            services.AddDomainServices();

            services.AddAutoMapper();

            services.AddRouting(routing => routing.LowercaseUrls = true);

            services.Configure <AuthMessageSenderOptions>(Configuration.GetSection("EmailSettings"));

            services.AddLocalization(options => options.ResourcesPath = "Resources");

            //Allows injecting configurations in razor views from json file
            services.Configure <ApplicationConfigurations>(Configuration.GetSection("ApplicationConfigurations"));

            services.AddMvc(options =>
            {
                options.Filters.Add <AutoValidateAntiforgeryTokenAttribute>();
                options.Filters.Add <RequireHttpsAttribute>();
            })
            .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
            .AddDataAnnotationsLocalization();

            services.Configure <RequestLocalizationOptions>(options =>
            {
                var supportedCultures = new[]
                {
                    new CultureInfo("bg-BG"),
                    new CultureInfo("en-US")
                };

                options.DefaultRequestCulture   = new RequestCulture(culture: "bg-BG", uiCulture: "bg-BG");
                options.SupportedCultures       = supportedCultures;
                options.SupportedUICultures     = supportedCultures;
                options.RequestCultureProviders = new List <IRequestCultureProvider>
                {
                    new QueryStringRequestCultureProvider(),
                    new CookieRequestCultureProvider()
                };
            });
        }