一、手机短信验证码登录过程

1、构造手机验证码,需要生成一个6位的随机数字串;

2、找短信平台获取使用接口向短信平台发送手机号和验证码,然后短信平台再把验证码发送到制定手机号上

3、将手机号验证码、操作时间存入Session中,作为后面验证使用;

4、接收用户填写的验证码、手机号及其他注册数据;

5、对比提交的验证码与Session中的验证码是否一致,同时判断提交动作是否在有效期内;

6、验证码正确且在有效期内,请求通过,处理相应的业务。

二、手机短信验证码登录过程

1、使用Session(session的配置及注入)

2、Redis存储Session(在session前注册分布式缓存IDistributedCache后,session会自动写入缓存里 )

3、解决数据保护,统一不同机器之间的MachineKey

Data Protection(数据安全)机制:为了确保Web应用敏感数据的安全存储,该机制提供了一个简单、基于非对称加密改进的、性能良好的、开箱即用的加密API用于数据保护。
它不需要开发人员自行生成密钥,它会根据当前应用的运行环境,生成该应用独有的一个私钥。这在单一部署的情况下没有问题。
一旦在集群环境下进行水平扩展,那么每个独立的应用都有一个独立的私钥。这样在负载均衡时,一个请求先在A容器建立的Session会话,该机制会通过当前容器的密钥加密Cookie写入到客户端,下个请求路由到B容器,携带的Cookie在B容器是无法通过B容器的密钥进行解密。
进而会导致会话信息丢失的问题。所以在集群情况下,为了确保加密数据的互通,应用必须共享私钥。

 

参照:.NET Core实战项目之CMS 第十六章 用户登录及验证码功能实现 - 走看看 (zoukankan.com)

.Net Core Web Api实践(二).net core+Redis+IIS+nginx实现Session共享 (qq.com)

ASP.NET Core如何解决分布式Session一致性问题 (qq.com)

(7条消息) ASP.NET Core负载均衡Session共享_965201314.cn的博客-CSDN博客

数据保护参照:

集群环境下,你不得不注意的ASP.NET Core Data Protection 机制 (wjhsh.net)