You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor Server应用登录失败IP封禁方案及Azure FrontDoor配置咨询

Blazor Server + ASP.NET Core Identity 登录IP封禁方案咨询

我的场景与疑问

我有一个Blazor Server应用,当前基于ASP.NET Core Identity(MVC架构)开发。想要实现IP封禁逻辑:若某远程IP在15分钟内出现50次登录失败,就封禁该IP4小时,禁止其登录。有几个问题想请教:

  1. 是否只需关注Login.cshtml.cs文件?我计划在该文件的OnPostAsync()方法中监控登录失败事件并获取对应IP,同时在方法入口判断IP是否超限,若超限直接返回错误。
  2. 使用Dictionary<IPAddress, int>来跟踪失败次数是否存在问题?
  3. 应用将部署在Azure并使用FrontDoor,能不能配置FrontDoor在指定时间段内拦截特定IP?这样请求就不用到达应用代码层面。
  4. 我还遗漏了其他需要注意的事项吗?

两种参考方案(各有优劣,不做选定)

方案一(Ruikai Feng 提供)

代码层面实现建议

  • 不要局限于Login.cshtml.cs:把封禁逻辑写在Login页面的后置方法里会导致逻辑耦合,后续扩展其他登录入口(比如API登录、第三方账号关联登录)时会遗漏规则。更合理的方式是用ASP.NET Core中间件或者Identity的事件钩子(比如SignInManager的FailedToSignIn事件)来统一捕获登录失败事件,覆盖所有登录场景。
  • Dictionary的局限性:内存中的Dictionary是进程内存储,多实例部署(比如Azure App Service多实例扩缩容)时会出现各实例数据不一致的情况,而且应用重启后所有记录都会丢失。建议改用分布式缓存(比如Azure Redis Cache)存储IP的失败计数和封禁状态,同时给每个记录设置过期时间:失败计数的记录设15分钟过期,封禁记录设4小时过期,自动清理无效数据。
  • 获取真实客户端IP:因为用了FrontDoor,直接通过HttpContext.Connection.RemoteIpAddress拿到的是FrontDoor的代理IP,需要从请求头X-Forwarded-For中解析出真实的客户端IP。
  • 封禁校验时机:建议在全局中间件中做IP封禁校验,而不是只在Login方法入口。这样能提前拦截所有发往应用的请求(不仅是登录请求),避免恶意IP尝试其他攻击路径。

FrontDoor配置补充

FrontDoor原生支持速率限制规则,但只能针对总请求数做限制,无法直接关联“登录失败次数”。如果要在FrontDoor层面实现基于登录失败的IP拦截,需要结合Azure Monitor或者自定义规则引擎,把应用的登录失败日志同步到FrontDoor的规则中,实现复杂度较高,适合流量较大、需要减轻应用服务器压力的场景。


方案二(Kurt Hamilton 提供)

轻量代码实现思路

  • 聚焦Login.cshtml.cs快速落地:如果应用是单实例部署,或者暂时不需要考虑多实例扩缩容,直接在Login.cshtml.cs中处理是最快的落地方式:
    • 在OnPostAsync()方法入口先检查当前IP是否在封禁列表中,若是直接返回错误提示。
    • 当登录失败时,更新该IP的失败计数,当计数达到50次时标记为封禁状态。
  • Dictionary的优化:使用ConcurrentDictionary<IPAddress, (int FailedCount, DateTime FirstFailedTime)>替代普通Dictionary,保证多线程环境下的线程安全;同时可以配合后台定时任务,每15分钟清理一次超过15分钟的失败记录,每4小时清理一次过期的封禁记录,避免内存占用过高。
  • FrontDoor的直接配置方案:FrontDoor的Web Application Firewall (WAF) 支持自定义IP黑名单规则,如果想完全在FrontDoor层面拦截,可以这样做:
    1. 应用在检测到需要封禁的IP时,调用Azure REST API将该IP添加到FrontDoor WAF的黑名单中。
    2. 配置WAF规则拦截黑名单中的IP,并设置4小时后自动移除该IP(可以通过Azure自动化任务实现)。
  • 额外注意事项:
    • 要兼容IPv6地址的解析和存储,避免遗漏这类IP的封禁。
    • 封禁时返回明确的错误提示(比如“您的IP因多次登录失败已被封禁,请4小时后重试”),避免用户困惑。
    • 配置可信IP白名单(比如公司内部IP、测试环境IP),避免误封禁合法用户。

内容的提问来源于stack exchange,提问作者David Thielen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 09:05:25