ASP.NET CoreRateLimit-ASP. NET Coreレート制限ミドルウェア

ASP.NET CoreRateLimit-ASP. NET Coreレート制限ミドルウェア

AspNetCoreRateLimitは、ASP.NET Coreレート制限ソリューションです。

最后更新 2022/07/12 20:26
黑哥聊dotNet
预计阅读 3 分钟
分类
ASP.NET Core
标签
.NET C# ASP.NET Core

プレゼンテーション:プレゼンテーション

AspNetCoreRateLimit 是一种 ASP.NET Core 速率限制解决方案,旨在控制客户端可以根据 IP 地址或客户端 ID 向 Web API 或 MVC 应用程序发出请求的速率。AspNetCoreRateLimit 包包含一个 IpRateLimitMiddleware 和一个 ClientRateLimitMiddleware,对于每个中间件,您可以为不同的场景设置多个限制,例如允许 IP 或客户端在每秒、15 分钟等时间间隔内进行最大调用次数。您可以定义这些限制来解决对 API 发出的所有请求,或者您可以将限制范围限定为每个 API URL 或 HTTP 动词和路径。

地址: https://github.com/stefanprodan/AspNetCoreRateLimit

機能性は

クライアントIPベースのレート制限

  1. 設定と設定
  2. レート·リミット·ルールの定義
  3. 行動の仕方
  4. ランタイム更新レートの制限

クライアントIDに基づくレート制限

  1. 設定と設定
  2. レート·リミット·ルールの定義
  3. 行動の仕方
  4. ランタイム更新レートの制限

高度な設定

  1. カスタム·クォータ超過応答
  2. IP / ClientId解決貢献者
  3. Redisを分散カウンタストアとして使用する

クライアントIPベースのレート制限

NuGetインストール:

Install-Package AspNetCoreRateLimit

Install-Package AspNetCoreRateLimit.Redis

**Startup.コード **

public void ConfigureServices(IServiceCollection services)
{
  services.AddOptions();
  services.AddMemoryCache();
  services.Configure<IpRateLimitOptions>(Configuration.GetSection("IpRateLimiting"));
  services.Configure<IpRateLimitPolicies>(Configuration.GetSection("IpRateLimitPolicies"));
  services.AddInMemoryRateLimiting();
  services.AddMvc();
   services.AddSingleton<IRateLimitConfiguration, RateLimitConfiguration>();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
  app.UseIpRateLimiting();

  app.UseMvc();
}

appsettings.json:

"IpRateLimiting": {
    "EnableEndpointRateLimiting": false,
    "StackBlockedRequests": false,
    "RealIpHeader": "X-Real-IP",
    "ClientIdHeader": "X-ClientId",
    "HttpStatusCode": 429,
    "IpWhitelist": [ "127.0.0.1", "::1/10", "192.168.0.0/24" ],
    "EndpointWhitelist": [ "get:/api/license", "*:/api/status" ],
    "ClientWhitelist": [ "dev-id-1", "dev-id-2" ],
    "GeneralRules": [
      {
        "Endpoint": "*",
        "Period": "1s",
        "Limit": 2
      },
      {
        "Endpoint": "*",
        "Period": "15m",
        "Limit": 100
      },
      {
        "Endpoint": "*",
        "Period": "12h",
        "Limit": 1000
      },
      {
        "Endpoint": "*",
        "Period": "7d",
        "Limit": 10000
      }
    ]
  }

EnableEndpointRateLimitingがfalseに設定されている場合、制限はグローバルに適用され、エンドポイントの規則* にのみ適用されます。たとえば、毎秒5回の呼び出しに制限を設定した場合、任意のエンドポイントへのHTTP呼び出しはその制限にカウントされます。

EnableEndpointRateLimitingがtrueに設定されている場合、制限はのように、各エンドポイントに適用されます。たとえば、*/api/valクライアントに1秒当たり5回の呼び出しに制限をした、GET /api/valは1秒当たり5回呼び出しますが、/api/valも5回呼び出します。

StackBlockedRequestsがfalseに設定されている場合、拒否されたコールはスロットルカウンタに追加されません。クライアントが1秒間に3リクエストを発行し、1秒間に1通話の制限を設定した場合、1分または1日あたりのカウンタなどの他の制限は、ブロックされていない最初の通話のみを記録します。拒否されたリクエストを他の制限にカウントする場合は、StackBlockedRequestsをtrueに設定する必要があります。

RealIpHeaderKestrelサーバーがリバースプロキシの背後にある場合にクライアントIPを抽出するために使用されます。プロキシが別のヘッダーを使用している場合、X-Real-IPはこのオプションを使用して設定されます。

ClientIdHeaderホワイトリストを抽出するために使用するクライアントID 。クライアントIDがこのヘッダに存在し、ClientWhitelistで指定された値と一致する場合、レート制限は適用されません。

ここではクライアントIPベースのレート制限のみを記述しています。このプロジェクトに興味がある場合は、AspNetCoreRateLimitのウェブサイトを参照してください。

最后に皆は私の文章を好きになって、まだ迷惑をかけて注意を払う、希望 net生态圏がますます良くなる!

Keep Exploring

延伸阅读

更多文章
同分类 / 同标签 2022/06/22

ASP.NET Core Web APIのローカライズ(単一リソースファイル)

マイクロソフトのデフォルトは、複数のリソースファイルに対応するクラスであり、使用はより面倒ですが、この記事では、単一のリソースファイルの使用方法、すなわち、プロジェクト全体のすべてのクラスが多言語リソースファイルのセットに対応しています。

继续阅读