登录鉴权

1.用户注册

前台需要给我们传递用户名、密码、手机号、手机验证码。验证用户前台传过来的数据是否符合规范,我们使用的Hibernate Validator框架实现的服务端表单校验。短信验证码这块,我们采用的阿里的大于短信接口来做的,我们单独搭建了一个短信微服务,发送的短信请求通过MQ消息由短信微服务消费,进行短信发送。密码我们使用的是Spring提供的BCryptPasswordEncoder加密算法,分成加密和验证两个过程:

  • 加密:算法会对明文密码使用UUID随机生成一个salt,使用salt结合密码来加密,得到最终的密文。

  • 验证密码:需要先拿到加密后的密码和要验证的密码,根据已加密的密码来推测出salt,然后利用相同的算法和salt对要验证码的密码加密,与已加密的密码对比即可。

短信验证码的有效期为30分钟,为了验证短信验证码的时效性,我们保存到了redis中,手机号作为key,验证码作为value,设置有效期为30分钟。另外为了防止恶意攻击,我们限制一个手机号1分钟之内只能发送一次验证码,这个也是通过redis来实现的,手机号拼接"_yes"为key,验证码为value,设置有效期为1分钟。为了防止机器恶意调用验证码接口,我们这个地方使用图形验证码来进行限制。

2.用户登录

使用JWT+RSA加密技术实现了无状态登录。我们单独搭建了一个校验微服务来进行校验,验证用户名和密码的话需要通过feign组件来调用用户微服务来进行查询,另外的话,我们使用JWT+RSA加密生成一个token返回给前台,写到cookie中。

3.校验登录

在页面created生命周期函数中就调用校验登录的接口。接口的主要逻辑为:

  • 去redis中验证token是否存在redis中,如果存在说明,此token失效了,返回401
  • 取cookie中的token信息,使用公钥进行解密操作,获取用户信息进行返回
  • 如果前两步正确无误,但是token的有效期小于15分钟则进行token的续签操作,即重新生成一个token,写入cookie中即可

- 4.登出(注销/退出登录)操作

    • 把JWT存入黑名单,就是把token放入redis中,设置一个过期时间(token的有效剩余时间)
  • 删除客户端cookie

- 5.网关登录控制

1)获取用户的登录凭证jwt
2)解析jwt,获取用户身份
如果解析失败,证明没有登录,返回401
如果解析成功,继续向下
3)根据身份,查询用户权限信息
4)获取当前请求资源(微服务接口路径)
5)判断是否有访问资源的权限

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值