AspNetCoreRateLimit icon indicating copy to clipboard operation
AspNetCoreRateLimit copied to clipboard

Client rate limit by body parameter with multiple values.

Open mstfcck opened this issue 3 years ago • 2 comments

We use AspNetCoreRateLimit in our projects. Everything was pretty good until now.

We need additional features for that package as below:

We should apply rate limit rules for clients by requesting body parameters. The rule must belong to a specific endpoint. That could be stored in Redis and changeable anytime as dynamically. I have developed a draft and here are my updates:

I have used ValidationAttribute to reach related property and values and created a custom validation attribute called ClientRateLimitAttribute. The rest of the code is similar to RateLimitProcessor. Config as below:

Now we have "EnableBodyParameter" and "BodyParameters" configs.

"ClientRateLimitPolicies": {
    "ClientRules": [
      {
        "ClientId": "cl-key-0",
        "Rules": [
          {
            "Endpoint": "*",
            "Period": "1s",
            "Limit": 10
          },
          {
            "Endpoint": "get:/api/clients",
            "Period": "1m",
            "Limit": 2
          },
          {
            "Endpoint": "put:/api/clients",
            "Period": "5m",
            "Limit": 2
          },
          {
            "Endpoint": "post:/api/clients",
            "Period": "1m",
            "Limit": 7,
            "EnableBodyParameter": true,
            "BodyParameters": [
              {
                "ParameterName": "value",
                "ParameterValues": ["abc", "xyz"],
                "Period": "1m",
                "Limit": 3
              },
              {
                "ParameterName": "value",
                "ParameterValues": ["qwe", "rty"],
                "Period": "1m",
                "Limit": 5
              }
            ]
          }
        ]
      }
    ]
  }

That code works like this now but I know I can improve more. Before doing that I like to ask that would you support this? And what are your suggestions?

NOTE: I wanted to share the changes as PR, just for review.

mstfcck avatar Aug 10 '22 08:08 mstfcck

In fact there is no X-Forwarded-For support in general. Created an issue about it at https://github.com/stefanprodan/AspNetCoreRateLimit/issues/412

MarkCiliaVincenti avatar Jan 23 '23 09:01 MarkCiliaVincenti