我正在构建一项服务,允许在桌面应用程序中输入激活密钥,然后调用 Web 服务来检查密钥并返回许可证。此调用不需要授权。
Web 应用程序作为 Azure“应用服务”运行。我担心有人会试图“猜测”激活密钥并减慢我的服务速度。 (我不怕他们能够猜对,他们足够长了)。
Azure WebApps 是否有某种自动速率限制或 DOS 保护,还是我需要自己配置/编码?
如果我必须自己做,你能给我指出正确的方向吗?
2023 年更新: Azure 默认情况下似乎没有进行任何类型的速率限制。
但是,ASP.net Core 现在具有我正在使用的内置速率限制功能。相应的包是 Microsoft.AspNetCore.RateLimiting。 Microsoft 的文档对此 [1][2] 非常好,但我将提供我如何使用它(C#):
在设置代码中:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRateLimiter(_ => _
.AddFixedWindowLimiter(policyName: "MyRedeemLimitPolicy", options =>
{
options.PermitLimit = 3;
options.Window = TimeSpan.FromMinutes(15);
options.QueueProcessingOrder = QueueProcessingOrder.OldestFirst;
options.QueueLimit = 2;
}));
var app = builder.Build();
app.UseRouting(); // Must be before app.UseRateLimiter()!
app.UseRateLimiter();
在控制器中:
[AllowAnonymous]
[HttpPost]
[EnableRateLimiting("MyRedeemLimitPolicy")]
public IActionResult RedeemKey([FromBody] RedeemData data)
{ ... }
[1] https://learn.microsoft.com/en-us/aspnet/core/performance/rate-limit
[2] https://devblogs.microsoft.com/dotnet/announcing-rate-limiting-for-dotnet/