• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
混子程序员
博客园    首页    新随笔    联系   管理    订阅  订阅
.net6中关于identity框架中的DefaultEmailProvider

这两天在看.net core的identity中的DefaultEmailProvider,其生成的是一个6位数的验证码,但是其存储和校验方式都不知道,而且过期时间也无法设置。

 

经过一番查找之后,找到了.net core的源码类,Rfc6238AuthenticationService.cs,其他的引用类我嫌麻烦就不放了,跟主题没什么关系。

 

这个类中,就是生成和校验6位验证码的totp算法工具类。其中时间步进和步进数全部写死,所以无法自定义设置,如果想要自己设置,那么需要重写这个类。

 

所以解决了这两个问题,但是又带来了一个新的问题。。。。。。。就是在校验和生成的代码上,有个注释。。。。。。。

 

 

 看样子,哦,9分钟之内的生成的校验码都有效,好吧,我试试,结果8分钟就失效了。。。。。。。。。。。。。。。。。。

 

最后,想了下,得出结论,6分钟以内,肯定有效,而6分钟到9分钟,有可能有效,有可能失效,9分钟以后一定失效。。。。。。。。。。。。。。。。

 

原因为:

 

时间校验代码如下:

 

 

 

其中,他是按照3个步进的大小区间来进行判断的。所以理想状态下,确实是9分钟,但是实际上很难出现这种情况,3个步进区间的时间有可能不是平均分配的,有可能是,开始时间为1步进,过一秒后为2步进,3分钟后为3步进,再3分钟后为4步进,好了,现在从1步进到4步进之前,都算1到3步进,也就是符合判断条件有效验证码,但是实际上的理想区间为9分钟,那么还有2分59秒是属于第4步进的,在后面这2分59秒内,验证码是失效的,而通过最开始的1秒后进步进,可以把1秒想象成无穷小,所以,必定有效的验证码时间其实是在6分钟以内。。。。又因为1秒也可以趋近于无穷接近3分钟,所以得出6分钟到9分钟,有可能有效,有可能失效,9分钟以后一定失效的结论

 

这块的问题最后就基本了解清楚了,最后想说一句,微软大神,不想写注释可以不写,谢谢

 

哦哦,不对,还有个问题,就是为什么是-2到2,TMD时间还能倒流是吧。。。。。。。。。,算了,可能人家有别的情况的考虑咱没碰到过,功能正常也都无伤大雅了

posted on 2022-06-23 14:17  混子程序员ZMY  阅读(213)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3