常见系统认证实现流程

账密登录

  • 参数(账号、密码、登录终端编号)校验,密码正则校验
  • 获取请求头看请求是否携带该账号token
    • 若请求头携带该账号的有效token则直接响应该token
  • 查询当前账号是否处于黑名单
  • 查询缓存中账号认证失败次数是否超出上限
  • 获取当前账号信息
    • 判断账号状态是否正常
    • 比对账密是否正确 ,若错误直接新增缓存中该账号认证失败次数
    • 一定时间内认证失败次数达到上限则生成冻结记录
  • 判断该账号是否已存在token
    • 无,则签发token,并关联当前终端
    • 有,则将当前终端关联到该token
  • 将账号基本信息放入缓存
  • 异步生成认证记录
  • 清空认证失败次数
  • 响应token

短信验证码登录

发送短信验证码

  • 手机号正则检验
  • 判断是否频繁发送(如一分钟内只能发送一次)
  • 判断是否超过当日最高次数限制
  • 随机生成六位数验证码

    String validCode = String.valueOf(ThreadLocalRandom.current().nextInt(100000, 999999));

  • 同步调用三方服务发送短信
  • 雪花生成业务标识码
  • 创建频繁发送标记缓存(如一分钟内只能发送一次)
  • 业务标识码拼接验证码,缓存十分钟(十分钟内有效)
  • 当日发送次数+1
  • 响应业务标识码

验证码登录

  • 参数(验证码、业务标识码、手机号、认证系统)有效性校验
  • 获取请求头看请求是否携带该账号token
    • 若请求头携带该账号的有效token则直接响应该token
  • 获取/创建账号信息
    • 判断账号状态是否正常
  • 查询当前账号是否处于黑名单
  • 查询缓存中账号认证失败次数是否超出上限
  • 判断验证码是否过期
    • 判断验证码是否过期 ,若过期直接新增缓存中该账号认证失败次数
    • 一定时间内认证失败次数达到上限则生成冻结记录
  • 判断该账号是否已存在token
    • 无,则签发token,并关联当前终端
    • 有,则将当前终端关联到该token
  • 将账号基本信息放入缓存
  • 异步生成认证记录
  • 清空认证失败次数
  • 响应token

扫码登录

接口请求获取二维码

  • 参数(目标登录终端编号)有效性校验
  • 雪花生成二维码标识码 logoCode
  • 标识码放入缓存(标识码:登录终端编号)设置过期时间(1min)

    redisTemplate.opsForValue().set(logoCode, appId, 1, TimeUnit.MINUTES);

  • 响应标识码

PC端页面生成二维码

  • 将标识码信息生成二维码
  • 轮询调用回调接口
    • 通过轮询接口响应状态信息及token判断状态

APP扫码获取信息

  • APP扫描PC端二维码获取标识码

APP接口请求锁定二维码

  • 调用接口锁定二维码
    • 参数(标识码)有效性校验
    • 根据标识码新增二维码锁定缓存

      redisTemplate.opsForValue().set(“lock_qr_” + logoCode, logoCode, 1, TimeUnit.MINUTES);

App接口请求登录认证

  • 参数(标识码)有效性校验
  • 通过标识码判断二维码是否过期

    Integer cacheAppId = redisTemplate.opsForValue().get(logoCode);

  • 若未过期则续期为一分钟(防止授权完成前过期)

    redisTemplate.opsForValue().set(logoCode, cacheAppId, 1, TimeUnit.MINUTES);

  • 请求头中获取token,判断是否过期/有效
  • 判断终端编码(appId)是否已关联过token
    • 未关联:进行关联、异步写入认证记录
  • 新增token缓存

    redisTemplate.opsForValue().set(cacheAppId + logoCode, token, 1, TimeUnit.MINUTES);

  • 清除二维码缓存及二维码锁定缓存

    redisTemplate.delete(logoCode);
    redisTemplate.delete(“lock_qr_” + logoCode);

回调接口响应token

  • 入参(登录终端编码、二维码标识码)有效性校验
  • 判断二维码标识缓存是否过期(过期返回过期状态提示前端重新获取二维码)

    Integer cacheAppId = redisTemplate.opsForValue().get(logoCode);

  • 判断二维码锁定缓存是否存在(存在则返回前端锁定状态,PC页面信息更新为尽快确认登录)

    String token = redisTemplate.opsForValue().get(appId + logoCode);

  • 判断token缓存是否存在(存在则返回授权成功状态并一并返回token)

    String qrLock = redisTemplate.opsForValue().get(“lock_qr_” + logoCode);


平台间认证

接口请求后端认证

  • 参数(登录终端编码)有效性校验
  • 获取请求头token并校验有效性
  • 判断终端编码是否已关联过token
    • 未关联:进行关联、异步写入认证记录、响应token
    • 已关联:响应token

前端路由访问

  • 携带后端认证接口响应的token直接跳转到目标终端页面

微信一键登录(APP)

在这里插入图片描述

  • 没啥好说的官方教程

  • 注意,从文档中第二步才是后端该做的(AppID和AppSecret也得后端操心去催)

  • 大体流程

      /**
       * 通过code参数加上AppID和AppSecret等,通过API换取access_token
       * https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
       */
       
      /**
       * 刷新或续期access_token
       * https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=APPID&grant_type=refresh_token&refresh_token=REFRESH_TOKEN
       */
    
      // 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作
    
      // 通过openid获取用户信息(系统用户信息应关联此字段)
    
      // 走正常系统登录认证流程
    

微信小程序登录

在这里插入图片描述

  • 也是现成套路就不多赘述了,官方教程

  • 也就是获取access_token调用的地址和微信一键登录的不一致

      /**
       * 通过code参数加上AppID和AppSecret等,通过API换取access_token
       * GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
       */
    

三方账号登录

  • 和微信登录差不多,关键也是系统账号关联一个三方的openid
  • 只不过三方账号代为登录时,在请求登录时就直接传入了openid
  • 系统通过openid去查询/创建该系统账号,然后走后续认证流程(参考账密登录获取到用户信息后的后续操作)签发token

手机号一键登录

收费的,一次三毛还是三分来着。所以除了三网官方的App其他应用提供此能力的不多(京东那样的狗大户还有一些想获取你信息的不正经软件除外哈)
信息配置官方教程
前端接入官方教程
后端接入官方教程

  • 用户请求登录时通过App应用(通俗讲就是前端/移动端)中内嵌的三方SDK来采集用户手机号码
  • 页面提示用户是否一键登录
  • 用户同意授权后请求三方SDK获取token(此时token为三方服务签发并非应用服务token)
  • 此时调用应用服务端授权(传入三方服务签发的token)
    • 调用三方SDK提供的token校验接口
    • token认证通过后会返回加密后的手机号
    • 通过检验后通过手机号获取系统账号信息
    • 后续参考账密登录获取到账号信息后的流程

生物识别登录

就简单介绍下吧,这个太过简单了。

  • 前端引用三方组件库,通过用户指纹、面部等生物信息获得一个识别码(类似微信的openid)
  • 将识别码以参数形式传递给应用服务端,用用服务端通过识别码获取关联的系统账号信息
  • 后续步骤参考账密登录获取到账号信息后的流程
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值