一个简单的安全认证流程


用户登录:需要填写用户名,密码,如果在传输的过程中直接用明文,就恨可能被拦截,导致密码泄露,
也就是说,在客户端提交数据之前,应该对数据进行加密,然后在服务器接到加密后的密钥后,在根据解密规则进行解密。
然后 再把揭秘后的 密码 进行 md5 加密,最后和数据库中的数据进行比较。


另外数据库中的密码也应该是加密过的,并且是不可逆的加密(例如md5),防止数据库被攻破后密码全部泄漏。
另外用户名密码数据应该和用户的其他信息分割开来,这样在返回用户信息的时候,不用把用户名密码一起返回。


用户登录成功之后,生成一个用户credential ,可以存入缓存,  key = 用户ID + 设备ID + version  ,  credential = used +"|"+时间戳+“|”+随机数 ,
然后返回给客户端,以后客户端每次请求的时候都要带着这个 credential,


如果某个操作需要校验 用户的credential ,就查询一下缓存中是否有 信息,如果没有,让用户重新登录。


用户credential  信息 存在缓存里是有时间限制的,为了让用户不用频繁登录,我们可以开启一个保持登陆的接口,
这个接口里,可以在用户打开app 的时候调用一下,用来更新用户的认证信息。


还有一些配置信息,也可以提供一个接口,让用户打开app 的时候可以调用。


web 端:


登陆过程是一样的,而且认证信息 返回给客户端后,存储位置也一样,都是存储到了cookie 中。

总结:
用户认证和用户权限检查是两回事儿,所以设计起来应该是两个过滤器(拦截器)。
过滤器和拦截器的作用这里是一样的,就是在用户操作之前进行一些判断,只是实现机制不同,
拦截器 实现机制 是反射,过滤器是 函数回调。
过滤器 必须用于 servlet 容器项目,拦截器不是。


web 端 用户认证 阶段 做的事情:

1 从 请求的cookie 中 ,获取 服务器 返回的 认证信息(用户ID,当前时间,用户ID和当前时间的 加密串,给cookie设置有效时间,域名),如果没有,则 告诉用户需要登录,如果有,验证登录信息的准确性,如果不准确,返回给客户端,重新登录,如果准确,
根据用户ID查询 用户信息,如果可以查到,并且用户状态等都是OK 的,则 确定用户登录成功,把用户信息设置到请求的属性中。


2 权限校验:拦截器:
获取请求URL,如果url 在不需要校验权限的列表中,则校验通过,否则,从request 中获取用户信息,根据用户信息获取用户权限信息,
根据当前url 判断 访问资源需要的权限,如果这个权限 在用户拥有的权限列表中,
则代表用户可以访问,否则 用户 不可以访问。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值