0
点赞
收藏
分享

微信扫一扫

登录模块的设计思路

沐之轻语 2022-02-20 阅读 145
java

登录(注册)方式

现在各大网站常用的三种登录(注册)方式主要有三种:账号密码登录,验证码登录和第三方账号登录。

1.账号密码登录

用户输入账号和密码,点击“登录”按钮进行的登录。密码因为保密不能用明文传输,但初次登录又不知道数据库存放的当前用户的密码,可以用RSA算法对传送的密码进行加密。

RAS算法是一种非对称的加密算法。当客户端向服务器端发送请求时,服务器端把RAS公钥发送到客户端,同时服务端保存私钥。当用户登录时,客户端用获取到的公钥对密码加密,然后传送到服务端。服务端接收到后,再用私钥进行解密,然后验证。

2.验证码登录

用户输入手机号,点击获取验证码,调用后台的生成验证码接口,传参为手机号。生成验证码之后可以将该数据保存到Redis当中以便于后续校验。用户点击登录之后传入账号和验证码。

3.第三方账号登录

用户可以通过QQ,微信,微博账号等登录系统。

登录过程

1.账号密码登录过程

服务器端接收客户端传来的账号以及加密后的密码数据,通过私钥进行密码解密。

2.验证码登录

服务器端接收客户端传来的手机号以及验证码,跟redis中存放的验证码进行比对。

3.第三方账号登录

用户点击图标输入账号密码,跳转到授权页,查看授权信息点击确认进行登录。

后台数据处理

1.账号密码登录

服务器端收到数据,从数据库中查询看是否有当前账号,若没有则返回结果“查找不到当前账号”。若存在该账号,则获取当前账号存放在数据库中的盐值对当前密码进行加密,并将该加密后的密码与数据库中存放的密码比对。密码一致则登录成功,返回用户的基本信息。若密码不一致,则返回结果“密码错误,请重新输入!”。

2.验证码登录

服务器端将收到的验证码与redis中的验证码比对,一致的话就登录成功,否则返回结果“验证码错误,请重新输入!”

3.第三方账号登录

登录成功之后会返回一个token,openid等数据,在这个过程中会用到oauth2.0;客户端拿到token,openid,loginType数据去请求服务器,服务器拿到数据会根据对应的loginType去对应的用户中心进行token和openid进行校验,校验不通过就返回错误码。校验通过之后会判断本地时候有loginType和openid存在,不存在就进行远程获取用户名和头像等基础信息作为本地的基础数据并返回code值。存在就进行登录操作,返回code值。客户端拿到code值后进行token值的换取,这里也是遵照oauth2.0协议走的,后续请求要带上token,token值在服务端存活时间比较久,若想做永不下线操作的话,每次请求都将token的时间累加。

数据库设计

id  bigint 自增主键

mobilePhone  int 用户手机号

password  char(50) 用户密码

email  char(20)用户邮箱号

nickname  char(10)  昵称

photo  char(30)  用户头像

salt   char(16)  盐值

用户在账号登录的数据库字段如上,如果后续想到会再添加。

oAuth

oauth是一个关于授权的开放网络标准,目前的版本是2.0。oauth在客户端和服务提供商之间设立了一个授权层,客户端不能直接登录服务器,只能登录授权层,以此将用户和客户端区分开来。

名词解释

第三方应用程序:又称“客户端”

HTTP服务提供商 : 简称服务提供商

资源所有者:用户

用户代理 : 浏览器

认证服务器: 服务商专门用来认证的服务器

资源服务器:服务器提供商存放用户生成资源的服务器,它与认证服务器可以是同一台服务器,也可以是不同的服务器。

流程

用户打开客户端以后,客户端要求用户给予授权。用户同意授权。客户端使用获得的授权向认证服务器申请令牌(token)。认证服务器对客户端进行认证后,确认无误就同意发放。客户端使用令牌,向资源服务器申请获取资源,资源服务器确认令牌无误,同意向客户端开放资源。

授权模式

授权码模式,隐式模式,密码模式和客户端模式。

举报

相关推荐

0 条评论