如何在Azure B2C中限制验证码邮件发送频次?
针对Azure环境下邮箱验证码发送限流的优化方案
基于Azure Redis Cache的分布式限流
拿邮箱地址当唯一标识key,发送验证码前先查Redis里这个key的计数:- 要是计数没到阈值(比如10分钟内5次),就发验证码,同时把计数加1,给key设个和时间窗口一致的过期时间(比如10分钟)
- 要是计数到阈值了,直接返回限流提示
这个方案轻量延迟低,适配分布式系统,比AFD的全局限流精准得多,能直接控制单个邮箱的发送频率。
用Azure Cosmos DB/Table Storage跟踪发送记录
每次发验证码,往Cosmos DB或者Table Storage里写一条带邮箱、发送时间的记录。发之前先查这个邮箱在指定时间窗口内的记录数:- 数量没超限制就发,超了就拒绝
可以给记录设TTL自动清理过期数据,不用手动维护存储冗余。适合需要留存发送日志的场景,和Azure现有服务集成也顺畅。
- 数量没超限制就发,超了就拒绝
Azure AD B2C自定义策略加限流逻辑
如果你的注册/重置密码是用Azure AD B2C做的,能在自定义策略里加验证步骤:- 调用自定义API(比如Azure Functions)查这个邮箱的发送次数
- 根据API返回结果决定能不能继续发验证码
这个方案直接嵌在身份验证流程里,不用额外配网关,逻辑更贴合业务场景。
Azure API Management(APIM)精细化限流
比起AFD,APIM支持按请求参数(比如邮箱)限流,能配置按email参数的具体值统计调用次数,设置时间窗口和阈值。配置比AFD简单,限流粒度更细,精准针对单个邮箱控制。
内容的提问来源于stack exchange,提问作者Dannom
相关产品推荐
相关产品推荐

