常见系统认证实现流程

news2024/11/17 0:32:41

文章目录

    • 账密登录
    • 短信验证码登录
    • 扫码登录
    • 平台间认证
    • 微信一键登录(APP)
    • 微信小程序登录
    • 三方账号登录
    • 手机号一键登录
    • 生物识别登录

账密登录

  • 参数(账号、密码、登录终端编号)校验,密码正则校验
  • 获取请求头看请求是否携带该账号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)
  • 将识别码以参数形式传递给应用服务端,用用服务端通过识别码获取关联的系统账号信息
  • 后续步骤参考账密登录获取到账号信息后的流程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1309657.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python编程基础:IDE编译直接报错了,即使不明白也要去参考系统给的提示

文章目录 1、错误信息2、解决过程2.1、结论2.2、正解 3、不要盲目相信自己百度的能力 1、错误信息 SyntaxError: Non-UTF-8 code starting with ‘\xe8’ in file D:\xxxx\scripts\testjson.py on line 4, but no encoding declared; see http://python.org/dev/peps/pep-0263/…

css未来:使用light-dark()切换主题色

css未来:使用light-dark()切换主题色 要根据使用的是浅色模式还是深色模式来更改颜色,我们通常会使用 prefers-color-scheme 媒体查询。为了让代码实现变得更容易,CSS 现在附带了一个名为 light-dark() 的实用函数。该函数接受两个颜色值作为…

国密SSL证书有哪些?一起来看国密SSL证书品牌大合集

早在2011年,我国国家密码管理局就已经对网络安全高度重视,在《关于做好公钥密码算法升级工作的通知》中,明确提出在建和拟建公钥密码基础设施电子认证系统和密钥管理系统应使用国密算法。并随之陆续颁布了《网络安全法》、《密码法》、《关键…

【数据结构(十·树结构的实际应用)】平衡二叉树(5)

文章目录 前言1. 基本概念2. 应用案例2.1. 左旋转(单旋转)2.1.1. 思路分析2.1.2. 代码实现 2.2. 右旋转(单旋转)2.2.1. 思路分析2.2.2. 代码实现 2.3. 双旋转2.3.1. 问题情景2.3.2. 思路分析2.3.3. 代码实现 前言 二叉排序树可能存在的问题: 看一个案例(说明二叉排…

Amazon Connect ,全渠道云联络中心

Amazon Connect ,全渠道云联络中心 前言一. Amazon Connect 介绍 🗺️二. Amazon Connect 使用教程 🗺️1.我们打开URl链接找到对应服务2.输入Amazon Connect选中第一个点击进入即可;3.在进入之后我们就开始创建实例,点…

【方法】如何给Word文档添加水印?

想要保护文档内容的原创性,我们可以给文档添加上水印来做个防伪标记,防范文件内容被盗用。 有些小伙伴还不知道Word在哪里设置添加水印,接下来分享一个添加水印的教程,一起学习一下吧。 1. 打开需要添加水印的Word文档&#xff…

【源码复现】《Towards Deeper Graph Neural Networks》

目录 1、论文简介2、论文核心介绍2.1、基本概述2.2、模型介绍 3、源码复现3.1、torch复现3.2、DGL复现 1、论文简介 论文题目——《Towards Deeper Graph Neural Networks》论文作者——Meng Liu, Hongyang Gao & Shuiwang Ji论文地址——Towards Deeper Graph Neural Net…

如何给pycharm配置解释器

目录 给pycharm配置解释器 给pycharm配置解释器 选择show all 选择已经存在的环境 其中的py38是我通过conda创建的虚拟环境。

BearPi Std 板从入门到放弃 - 筑基(1)(RT-Thread 智慧路灯)

简介 使用BearPi IOT Std开发板及其扩展板E53_SC1, SC1上有I2C1 的光照强度传感器BH1750 和 EEPROM AT24C02, 智慧路灯功能, 实现亮度达到对应阈值则开启点灯 主板: 主芯片: STM32L431RCT6LED : PC13 \ 推挽输出\ 高电平点亮串口: Usart1I2C使用 : I2C…

排序算法(二)-冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序

排序算法(二) 前面介绍了排序算法的时间复杂度和空间复杂数据结构与算法—排序算法(一)时间复杂度和空间复杂度介绍-CSDN博客,这次介绍各种排序算法——冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序。 文章目录 排序算法(二)…

transformer文章翻译【Attention is all you need】

参考博客:https://blog.csdn.net/nocml/article/details/103082600 论文目录 摘要1. Introduction2. Background3. Model Architecture3.1 Encoder and Decoder Stacks3.2 Attention3.2.1 Scaled Dot-Product Attention3.2.2 Multi-Head Attention3.2.3 Application…

实验室移液器配套PFA吸头性能稳定特氟龙吸头特点

PFA吸头是一种高性能移液器配件,由聚全氟丙烯(Perfluoroalkoxy)材料制成。这种材料具有优异的耐化学品、耐热和电绝缘性能,使得PFA吸头在应用中表现出色。 首先,PFA吸头具有卓越的耐化学腐蚀性能。无论是酸性溶液、碱性…

环境保护:人类生存的最后机会

随着科技的进步和人类文明的不断发展,地球上的自然资源也在以惊人的速度消耗殆尽。人类对于环境的无止境的掠夺,使得我们的地球正面临着前所未有的环境危机。环境污染、全球变暖、大规模灭绝等问题不断困扰着我们,似乎指向了人类生存的最后机…

世微AP5414 锂电池升降压 恒流恒压 LED电源驱动IC

产品简介 AP5414 是一种输入电压范围宽(0.8~5.5V),可调恒定电流和限定电流两种模式来 驱动白光 LED 而设计的升压型 DC/DC 变换器。该器件能利用单节或双节干电池驱动单 颗大功率白光 LED,同样可以利用一节锂电池驱动两颗、三颗或…

docker gpu 详细部署 video-retalking(跟着步骤打指令就完事了)

本地操作系统:centos 搞个小塔 1、首先在centos下安装宝塔(后面会用到) 建个容器 2、根据自己要的python版本修改一下语句,这里拉取的是python3.8.8的镜像 docker run -itd --name video-retalking --gpus all --shm-size&qu…

医院污水处理设备远程监控超标报警解决方案

行业背景 近年来,我国医疗机构建设得到了巨大的发展。根据《2022年我国卫生健康事业发展统计公报》,2022年末,全国医疗卫生机构总数达1032918个。截至2022年10月,根据全国排污许可证管理信息平台,共有 13316家医院核发…

ElasticSearch - networking配置global

版本8.11 单机部署了一个节点 在elasticsearch.yml中 配置了network.host: 8.8.8.8(之前为127.0.0.1) 但启动服务失败 报错信息为: BindTransportException: Failed to bind to 8.8.8.8:[9300-9399] 为啥要配置8.8.8.8 是因为参考的官方说明 Networking | Elasticsearch Gu…

RHEL8_Linux下载ansible

本章内容主要介绍RHEL8中如何安装ansible ansible时如何工作的在RHEL8中安装ansible 1.ansible工作原理 如果管理的服务器很多,如几十台甚至几百台,那么就需要一个自动化管理工具了,ansible就是这样的一种自动化管理工具。 1&…

AWS Ubuntu设置DNS解析(解决resolve.conf被覆盖问题)

众所周知: Ubuntu在域名解析时,最直接使用的是/etc/resolve.conf文件,它是/run/systemd/resolve/resolve.conf的软链接,而对于刚装完的ubuntu系统,该文件的内容如下 ubuntuip-172-31-36-184:/etc$ cat resolv.conf #…

Mysql workbench

下载地址: https://download.csdn.net/download/a876106354/88616595