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

Asp.Net Core 中使用 SMS 服务替代邮件实现密码重置的技术问题

密码重置令牌短信发送方案解答

1. 如何使用SMS服务发送密码重置令牌

两种实现路径可以选择,分别对应不同的令牌生成逻辑:

  • 自定义短令牌映射方案:生成原生长令牌后,将令牌与用户ID绑定存储在缓存/数据库中,生成唯一的6位数字短码映射关系,仅将短码通过短信发送给用户。用户提交短码时,后台通过短码查询对应的原始长令牌,再调用Identity的密码重置验证逻辑即可。
  • 替换Identity令牌提供程序方案:自定义实现IUserTwoFactorTokenProvider<TUser>接口,将密码重置场景的令牌生成逻辑调整为输出6位数字,直接调用userManager.GeneratePasswordResetTokenAsync(user)即可得到短令牌,直接通过短信发送,验证时直接传入用户输入的短码即可。

2. 两种令牌方案的合理性对比

不推荐直接发送原生长令牌

UserManager.GeneratePasswordResetTokenAsync默认生成的令牌长度通常在100字符以上,直接通过短信发送存在两个核心问题:

  • 用户需要手动输入长串乱码字符,操作成本极高,体验极差
  • 长文本容易触发短信多段拆分,增加发送成本和接收失败概率,完全不符合短信场景的使用习惯

两种可行方案的优劣

自定义6位短令牌+映射原生长令牌(优先推荐)

实现逻辑:自行维护短令牌的生成、存储、过期、验证逻辑,短令牌验证通过后,后台再主动调用原生方法生成长令牌完成密码重置,全程不向用户暴露长令牌。

  • 优势:不需要修改Identity的默认配置,可同时兼容邮件长令牌、短信短令牌的多渠道重置需求,可灵活配置短令牌的有效期、重试次数、防爆破规则,安全性可控,实现难度低。
  • 劣势:需要自行维护短令牌的存储和生命周期管理。

替换Identity默认令牌提供程序生成短令牌

实现逻辑:通过依赖注入替换密码重置场景的令牌提供程序,让原生方法直接输出6位数字令牌,复用Identity自带的令牌验证和过期逻辑。

  • 优势:不需要自行维护令牌存储,完全复用Identity的内置能力。
  • 劣势:如果需要同时保留邮件场景的长令牌逻辑,需要配置多套令牌提供程序,实现复杂度更高。

内容的提问来源于stack exchange,提问作者Mohammad Barbast

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 22:36:03