当前位置: 首页 > news >正文

跨平台跨端的登录流程及其安全设计

跨平台跨端的登录流程及其安全设计

目录

跨平台跨端的登录流程及其安全设计

一、登录流程

1.1、登录流程时序图

1.2、三方App 登录

1.3、请求的路由守卫 

二、注册流程

2.1、注册流程时序图

2.2、多因素认证

2.3、自动跳转登录页面

三、涉及的技术与安全

3.1、用户许可授权

3.2、原生App权限

3.3、私域权限

3.4、加密与解密

3.5、前端相关的主要部分

3.6、后端相关的主要部分

3.7、安全相关的主要部分


一、登录流程

        为统一多端的路由守卫的模式(App客户端、浏览器web客户端(含移动端)、webview客户端等),保证系统及应用的安全,本文旨在寻求一种通用的、标准化的方法,可参考大厂的做法,比如微信小程序-登录流程时序:

https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html

1.1、登录流程时序图

说明:

         ⓪、可扩展为PaaS的后端服务:你的应用服务,可“剥离”为“业务API服务”和“平台API服务”,即上述“开发者服务”和“可扩展为PaaS的后端服务”。“平台API服务”,可以为第三方的“独立软件开发商ISV”提供接入服务,由它们代为“最终用户开发”,或扩展你的“业务API服务”的功能;同时,“平台API服务”,还可以作为“企业客户”的管理后端,统一管理为企业客制化的appid和appkey,每个企业都有一个唯一的“appid”标识。而且,“业务API服务”和“平台API服务”可以是“分布式架构”,它们之间,可以是1对1的关系、也可以是多对一的关系、还可以是”支持负载均衡“的多对多的关系。

         ①、“通用签名”和“一次性登录凭证code”:“通用签名”,可以被客制化为一个“可扩展为PaaS的后端服务”所提供的签名校验服务,它可以是一个同时具备“PreventDoubleSubmission防止双重提交功能”的时间戳的差值,这个差值极短比如0.03毫秒,即我们通常所说的“雪花算法ID”,可以有效防止一开始就被”ddos“攻击。“一次性登录凭证code”,相当于一个“一次性访问令牌”,下次再请求,该令牌就会失效。

         ②、AK换取SK:几乎是,所有大厂的平台服务,所采用的方式,即:拿“用户注册平台服务”时,所产生的AppID对象,“appid”及其键值"appkey",携带临时令牌code,生成用户当前“会话”所使用的session_ID对象,“session_id”及其键值"session_key"。其中,session_key,会话密钥,是对用户数据进行 加密签名 的密钥。为了应用自身的数据安全,开发者服务器不应该把会话密钥下发到“多端应用”,也不应该对外提供这个密钥。

         ③、自定义登录态loginStatus:将session_key和openid按照客制化的特定算法进行关联,并存取到“开发服务器”持久化,可以存取到后端服务的数据库中,也可以持久化到开发服务器的redis键值对中,便于后期查询“签名密钥”进行“签名的验证”。

         ④、缓存自定义登录态loginStatus——Storage:将loginStatus缓存到“本地”,“本地”,对移动端App而言,即使其应用的“沙盒”路径下的loginStatus文件;对PC端的App而言,可以是操作系统的用户数据目录(比如MSWindows下的C:\Users\Administrator\AppData\Roaming\yourApp),也可以是该应用根下的某个专门存取的路径下的“加密”的loginStatus文件,读取时需要“解密”。对基于“浏览器或webview”的应用(比如html5网站、微信/支付宝/百度等的小程序),直接将其缓存到“Storage”下:

1.2、三方App 登录

        若你的服务,是PaaS的扩展平台服务,在你的App的基础之上,为第三方开发者提供API接入服务,可在上述流程开始,增设1个OAuth2.0的流程;首先征得”用户的同意“,三方服务,才可生效。

1.3、请求的路由守卫 

        对基于浏览器(含嵌入式浏览器)的客户端应用而言,一切,皆请求和响应,无论多页应用还是单页应用,均需要守卫上述1.1中的”自定义登录态“,任何对目标服务的请求,没有自定义登录态或自定义登录态失效,均需”重新进行登录“。

        对原生App(含多端)而言,也同样遵循“路由守卫”法则。

二、注册流程

2.1、注册流程时序图

        如上,关键是要对标1.1、登录流程中的②、AK换取SK”。

2.2、多因素认证

        OAuth2.0第三方认证,可以是权威大厂的手机验证码、可以是公众广泛认同的第三方“互联登录”(比如“微信登录”、“QQ登录”、“支付宝登录”、“百度登录”等),也可以是它们之间的组合。

        对于“企业级”应用及“平台级”的应用,可能还会涉及“用户工商信息”的提交流程与审核流程(本案,略)。

        认证的目的:验证,请求者,是人,而非“机器”代码。

2.3、自动跳转登录页面

        进入“登录流程”。

三、涉及的技术与安全

3.1、用户许可授权

        本案,整个生命周期,都应严格按照中国“公安三所等保认证”的要求进行设计、架构和实施,以免后续不停返工。

        应当按照工信部要求, 凡是涉及用户隐私的环节,都主动出示“用户隐私保护协议”,并拉起“用户授权”的平台界面,供用户阅读与授权同意,无论html前端涉及的Cookies,还是移动App涉及的用户设备能力及其三方sdk引用,抑或是微信等私域应用所涉及的用户隐私,均需征得用户授权。

3.2、原生App权限

        ▪ Android客户端平台:AndroidManifest.xml及其相关权限代码

        ▪ Ios及MacOS客户端平台:info.plist.xml及其相关权限代码

        ▪ MSWindows客户端平台:UAC及ACL相关的权限代码

3.3、私域权限

        ▪ 涉及微信小程序等应用内的权限请求

        ▪ 涉及支付包小程序等应用内的权限请求

        ▪ 涉及百度小程序等应用内的权限请求 

3.4、加密与解密

        ▪ 对称加密AES

        ▪ 非对称加密RSA

        ▪ 国密:OpenSSL与SM2、SM4

3.5、前端相关的主要部分

        ▪ 网络三剑客:Html5 + Css3 + ES5/ES6(及其TypeScript)

        ▪ Web APIs、

        ▪ HTTP协议

        ▪ 其它主要的web开发技术

        ▪ 工程化与模块化:webpack(3/5后)、vite、Node.js相关部分

        ▪ 主要的三方框架:Vue(2/3)、React(新React)、Node.js相关部分

3.6、后端相关的主要部分

        ▪ Node.js(express)和Egg

        ▪ 编译型开发工具及其语言:C和C++、 Delphi;Java等

        ▪ 数据库:MySql、MS Sql Server、Oracle等;IndexedDB、Redis

3.7、安全相关的主要部分

        ▪ 网络协议和操作系统的安全

               ▪ ddos分布式拒绝服务攻击-Distributed Denial of Service

               ▪ 其它(太多太细,略)

        ▪ web安全-最常涉及的内容

               ▪ 同源策略与cors跨域资源共享

               ▪ CSP跨域安全策略

               ▪ 缓存相关的安全:强制缓存与协商缓存;Cache Storage、Session Storage、Cookies、Loacal Storage

               ▪ Worker专用线程、Service Worker服务线程,及其安全

               ▪ SSL、TLS及Https

               ▪ JWT(Json Web Token)

               ▪ OAuth2.0标准

               ▪ CSRF跨站请求伪造攻击与反攻击-Cross-site request forgery

                              利用站点对用户的信任骗取user info

               ▪ XSS跨站脚本攻击与反攻击-Cross Site Scripting

                              利用用户对站点的信任骗取user info

               ▪ 登录和认证-服务端(以上的技术融合,做好它是一切的前提

               ▪ 登录和认证-客户端(以上的技术融合,做好它是一切的前提

               ▪ 整理与归纳-涉及浏览器相关的安全领域

               ▪ 整理与归纳-涉及原生App相关的安全领域

               ▪ 整理与归纳-涉及私域应用相关的安全领域

喜欢的,就收藏并点个赞,鼓励我继续技术的原创写作及经验分享:

《大厂后台管理passportal鉴权登录的通行做法-之腾讯云研究》

需要改进的过往组件:《App账号注册登录设计》

相关文章:

跨平台跨端的登录流程及其安全设计

跨平台跨端的登录流程及其安全设计 目录 跨平台跨端的登录流程及其安全设计 一、登录流程 1.1、登录流程时序图 1.2、三方App 登录 1.3、请求的路由守卫 二、注册流程 2.1、注册流程时序图 2.2、多因素认证 2.3、自动跳转登录页面 三、涉及的技术与安全 3.1、用户…...

如何在Java中创建临时文件?

在Java程序中,有时需要创建临时文件来暂存数据或者执行某些操作。Java提供了许多方式来创建临时文件。在本教程中,我们将介绍如何使用Java标准库来创建临时文件。 一、使用File.createTempFile()方法 Java标准库中的File类提供了createTempFile()方法来…...

Vue表单基本操作-收集表单数据

收集表单数据 使用vue中的v-model收集表单里面的数据,不同的表单元素配合v-model会有不同的写法和技巧 本次的表单元素包括:文本框,单选,多选,下拉框,文本域 编写表单元素 首先编写表单元素,…...

Android 一个获取网址时间的Demo

Android 一个获取网址时间的Demo 文章目录 Android 一个获取网址时间的Demo通过一个网址获取时间的代码关于Android NTP 时间Android 同步时间代码 前段时间有个客户想用局域网同步Android 设备的时间,开发后把这个demo分享一下。 效果: 这里也获取了阿…...

ijkplayer解码流程源码解读

ijkplayer是一款基于ffmpeg的在移动端比较流行的开源播放器。FFmpeg是一款用于多媒体处理、音视频编解码的自由软件工程,采用LGPL或GPL许可证。 要想理解ijkplayer源码,首先得知道视频播放器的基本原理。 视频播放器播放一个互联网上的视频文件&#xf…...

2023年值得关注的3个品牌趋势,帮你弯道超车

2023年,大环境开放,压抑三年的消费蓄势待发,品牌如何唤醒消费者的、热情成了重中之重的大事。 春风和煦,万物生长。又到了各类品牌、各位营销人踌躇满志、斗志昂扬的时候了,浅析一下2023品牌宣传趋势,抓住…...

软考-高级项目管理(二十)

第20章 高级项目管理 (P572考0-2分选择 性价比很低) 在项目集管理中涉及的相关角色主要包括: 项目集发起人、项目集指导委员会、项目集经理、其他影响项目集的干系人 1.项目集发起人 项目集发起人和收益人是负责承诺将组织的资源应用于项目集,并致力于使项目集取得…...

RTMP协议深度解析:从原理到实践,掌握实时流媒体传输技术

目录标题 1. 引言1.1 流媒体传输技术的重要性1.2 为什么选择RTMP协议1.3 RTMP协议的发展与应用 2. RTMP协议基础2.1 RTMP协议简介2.2 RTMP协议与其他流媒体协议的比较2.3 RTMP协议的组成与工作原理 3. RTMP协议详解3.1 RTMP数据单元(Message)3.2 RTMP数据…...

2023mathorcup数学建模ABCD思路分析

更多思路分析,请看文末 A题:量子计算机在信用评分卡组合优化中的应用 题目提到了信用评分卡的组合优化,这是一个经典的优化问题。在这个问题中,需要通过不同的组合方式来选择不同的阈值,以达到最大化贷款利息收入和最…...

普通家庭,千万不要投入大量时间和金钱,让孩子去苦学和培养AI机器人编程了...

普通家庭,千万不要投入大量时间和金钱,让孩子去苦学和培养一些看似高端,实际却用处不大的兴趣爱好课程了,比如学钢琴、学音乐、学AI机器人编程这些兴趣爱好课程。 这些对孩子的成长其实意义并不大,尤其是AI机器人编程。…...

C++学习(day2)

文章目录 四. C中的字符串4.1 C支持两种风格的字符串4.2 string类型的赋值和初始化4.3 C风格和C风格的字符串互换4.4 string类中三个重要成员函数4.5 string类型的比较4.6 string类型的成员访问 at()6.8 string类型数据的输入 五、bool类型六、引用(reference&#…...

软考 - IP地址与网络划分

一.IP组成 1.1 首个八位字节规则 1.2 地址掩码 IP地址掩码 标准地址掩码 A类:255.0.0.0 前1个字节是网络号 后3个字节是主机号 B类:255.255.0.0 前2个字节是网络号 后2个字节是主机号 C类;255.255.255.0 前3个字节是网络号 后1个字节是主机号…...

Apifox软件的基础使用方式

Apifox软件的基础使用方式 简单方便的用途 该工具是接口在线调试工具,这里我给到连接供大家去官网下载,我个人觉得是比较于postman工具好用,提供的语言操作是中文版本的便于操作 下载和安装 https://apifox.com/?utm_sourcebaidu&ut…...

【Tensorflow】模型如何加载HDF文件数据集?

如果每个样本都被保存为一个单独的 HDF5 文件,可以使用 tf.data.Dataset.list_files 函数来创建一个文件名数据集,然后使用 tf.data.Dataset.interleave 函数来并行读取多个文件。 下面的示例展示了如何从多个 HDF5 文件中读取数据并创建一个 tf.data.D…...

校招又临近了,怎么在面试中应对设计模式相关问题呢?

夏天开始了,那么夏天结束时的毕业季也不远了。毕业是个伤感、期待而又略带残酷的时节,就像蜜桃无论成熟与否都会在这个时间被采摘,如果毫无准备就踏入社会,就会……马上变成低级社畜。所以说还是要早点为了毕业找工作做点准备&…...

padans关于数据处理的杂谈

情况:业务数据基本字段会有如下: Index([时间, 地区, 产品, 字段, 数值], dtypeobject)这样就会引发一个经典“三角不可能定理”,如何同时简约展现分时序、分产品、分字段数据。)一般来说, 1、时序为作为单独的分类&…...

神经网络的理解

文章目录 概念得分函数损失函数神经网络结构非线性激活函数神经网络运行过程神经网络能够做的事情概念 人工神经网络(Artificial Neural Networks,简写为ANNs)也简称为神经网络(NNs)或称作连接模型(Connection Model),它是一种模仿动物神经网络行为特征,进行分布式并…...

夏驰和徐策带你从零开始学数据结构——哈希表

哈希表的概念: 哈希表是一种常用的数据结构,它可以在 O(1) 的时间复杂度内执行插入、查找和删除操作。哈希表的核心思想是使用哈希函数将键值对映射到数组中的一个位置上,从而实现快速的访问和修改。 哈希表由两个主要部分组成:…...

linux实现网络程序

1️⃣ 在linux下,通过套接字实现服务器和客户端的通信。 2️⃣ 实现单线程、多线程通信。或者实现线程池来通信。 3️⃣ 优化通信,增加守护进程。 有情提醒,类里面默认的函数是内联。内联函数在调用的地方展开,没有函数地址&…...

FreeRTOS 队列(二)

文章目录 一、向队列发送消息1. 函数原型(1)函数 xQueueOverwrite()(2)函数 xQueueGenericSend()(3)函数 xQueueSendFromISR()、xQueueSendToBackFromISR()、xQueueSendToFrontFromISR()(4&…...

用python获取当前目录下的创建时间超过3天的所有python文件

直接上代码: import os import datetime print(os.getcwd()) # 获取当前目录下所有的html文件 html_files [] for filename in os.listdir(): if filename.endswith(.py): html_files.append(os.path.join(., filename)) now date…...

第五章 Linux实际操作——用户管理

第五章 Linux实际操作——用户管理 5.1 基本介绍5.2 添加用户5.3 指定、修改密码5.4 删除用户5.5 查询用户信息指令5.6 切换用户5.7 查看当前用户、登录用户5.8 用户组5.9 用户和组相关文件8.9.1/etc/passwd 文件8.9.2/etc/shadow文件8.9.3/etc/group文件 5.1 基本介绍 Linux系…...

悲观锁和乐观锁详细

悲观锁和乐观锁详细 悲观锁 ​ 悲观锁就是悲观的思想,他认为数据每一次被访问的时候都会被上锁,所以每次获得锁的时候都会上锁,这样其他线程想要获取这个锁的时候就会被堵塞,要等待上一个线程锁的释放。也就是说这个线程只一次只…...

三谈ChatGPT(ChatGPT可以解决问题的90%)

这是我第三次谈ChatGPT,前两篇主要谈了ChatGPT的概念,之所以火的原因和对人们的影响,以及ChatGPT可能存在的安全风险和将面临的监管问题。这一篇主要讲讲ChatGPT的场景和处理问题的逻辑。 这一次我特意使用了ChatGPT中文网页版体验了一番。并…...

Qt QSet 详解:从底层原理到高级用法

目录标题 引言:QSet的重要性与简介QSet 的常用接口迭代器:遍历Qset 中的元素(Iterators: Traversing Elements in Qset )高级用法:QSet 中的算法与功能(Advanced Usage: Algorithms and Functions in QList…...

Mac Doxygen的使用

Doxygen的使用 安装着Doxygen和Graphviz这两个东西 在源码目录先使用doxygen -g生成一个叫 ‘Doxyfile’ 的Doxygen的配置文件修改配置文件,里面都有介绍各个选项的功能,这里主要修改一下几个: HAVE_DOT YES EXTRACT_ALL YES EXTRACT_PRIVATE YES E…...

FPGA基础代码复用

一、verilog中有关代码复用的语法 1、连接符“{}” {4{1b1}} 或者 {5d6, 5d8} 2、参数(Parameter)型常量定义 parameter 参数名=表达式; 或者 localparam 参数名=表达式; parameter DATA_WIDTH 20; 3、function函数定义 …...

Hbase简介

HBase简介 一、HBase简介 1. HBase简介 (1) apache的顶级项目,hadoop的数据库,分布式、大规模的大数据存储。 HBase是Google的BigTable的开源java版本,建立在hdfs之上的,分布式、列存储、非关系(nosql、key-value&a…...

科海思除COD树脂,大孔树脂,除COD专用树脂

一、产品介绍 Tulsimer A-722 MP具有控制孔径的大孔强碱性Ⅰ型阴离子交换树脂 Tulsimer A-722 MP 是一款具有便于颜色和有机物去除的控制孔径的,专门开发的大孔强碱性Ⅰ型阴离子交换树脂。 Tulsimer A-722 MP(氯型)专门应用于去除COD…...

Qt 多线程 QThread、QThreadPool使用场景

QThread 和 QRunnable 都是 Qt 框架中用于多线程编程的类,它们之间有以下不同点: 继承关系不同 QThread 继承自 QObject 类,而 QRunnable 没有父类。 实现方式不同 QThread 是一个完整的线程实现,包含了线程的创建、启动、停止、…...