BS系统中的安全方案(SSO和Oauth2认证,数据加密)

news/2024/5/5 11:53:36/文章来源:https://blog.csdn.net/longqicsdn/article/details/129325406

摘要

用户用浏览器打开网站,DNS会根据域名找到相应的服务器IP给到浏览器,仅接着用户的浏览器会与服务器建立连接,通过网路上的各个设备(交换机、路由器、基站、光纤等),将服务器上的数据发送到用户的电脑上,在浏览器里呈现出来。在其通信链路上,只要任何一个设备被监听了,那么信息就有可能泄漏,信息若还不加密的话,那么监听信息的人就能直接看到用户的信息了,这就变成了用户信息泄漏。

为了杜绝这种情况,我们肯定要对信息加密,毕竟通信链路上的物理硬件等我们是没法控制的,只能提升信息的加密等级。当然,针对信息加密,国际安全组织也有解决办法:HTTPS,我们也不能只依赖HTTPS,自身也需要做好对信息的加密,比如对敏感数据进行加密,另外,避免网站被非法访问,可以进行登录认证。HTTPS就不讲了,只需申请证书再集成相应的组件即可,这里说下登录认证以及数据加密。

登录认证

假如我们不希望网站的信息直接展示在网上,只希望注册了的用户使用,我们可以加入登录认证模块,即只有输入了正确的账号密码的用户才能查看网站的信息,使用网站的功能。一般各模块属于同一系统的使用单点登录认证即可,若各模块功能属于不同系统则需要用到auto2或按对接方的要求对接认证了。

1、单点登录(SSO)

一般由用户模块或认证模块提供登录接口,该接口的参数基本是账号密码,返回值一般是token以及授权菜单或数据权限等信息。token对应的凭证由后端生成,token一般是UUID,有过期时间,保存在redis中,前端获取到token后缓存在浏览器中,发请求接口时带上这个token,一般是在请求头中。后端收到请求后,拦截验证token,若该token能在redis中找到,则验证通过继续处理返回数据,找不到则认证不通过,返回登录失败状态码让前端跳转登录页。

可以看到,单点登录认证成功的前提如下:

(1)使用统一拦截逻辑即验证的token要和登录的token对上。

(2)各模块连接的redis是同一个,保证能找到token。

安全性:依赖密码的强度、token的过期时间、密码错误的账户锁定时间。

2、Oauth2

一般的系统用SSO就足够了,毕竟用户信息和需要使用的数据全在一个系统。但随着互联网发展,各类系统和APP层出不穷,用户不希望每个系统或APP都建个账号,希望一个账号能授权登录各个系统,比如授权微信登录第三方云盘、第三方论坛、第三方游戏等。这个时候,单点登录就不够用了,毕竟微信不可能开放redis给别的公司,这样的话微信的数据库就暴露了,也不可能在第三方应用上输入微信的账号密码,让第三方应用调用微信的登录接口,这样的话微信的账号密码就暴露给第三方了。因此Oauth协议出世了,它规定了第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权。

目前Oauth1已被官方弃用,2012年就强烈建议使用Oauth2,Oauth2的官方网址:https://oauth.net/2/。可以看到Oauth2有4种认证模式:授权码模式(Authorization Code)、简化模式(Implicit)、账号密码模式(Resource Owner Password Credentials)、客户端模式(Client Credentials)。这4种模式,一般用到授权码模式,具体流程如下:

其中 资源拥有者就是用户、客户端是应用,授权服务器是第三方的授权服务模块,受保护资源是第三方的资源服务。

该方式主要原理就是第三方服务生成了用户的唯一标识以及授权码,不需要在应用里传第三方账号密码。比如二号店用微信扫码登录(网站集成微信登录官方文档:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316505&token=&lang=zh_CN):

(1)二号店是用微信开放平台链接传appid和redirect_uri等参数生成微信登录二维码。

(2)微信APP扫码识别出appid以及redirect_uri等信息,微信APP将当前登录人以及appid等信息发送给微信的鉴权服务器。

(3)微信鉴权服务器确认登录信息和应用信息无误后,将会把浏览器的微信开放平台链接重定向到二号店传的redirect_uri,并带上code等参数。

(4)二号店根据redirect_uri的页面或接口获取code参数,带上appid以及appsecret等参数,通过调用微信接口获取access_token。

(5)二号店通过access_token进行调用微信接口,获取用户基本数据资源或帮助用户实现基本操作。

在这个过程中,二号店和微信的视角分别如下:

对于二号店来说,用户信息不可见,无需提供登录页面,无论是微信登录二维码生成还是微信的登录认证对于二号店不可见,给到二号店的最终授权码access_token,二号店只能根据access_token查询微信里用户的信息。

对于微信(第三方)来说,需要提供 登录二维码和APP 或 公共登录页面,使客户能用APP扫码登录或通过公共登录页(不允许嵌套)登录,还需要提供注册应用的应用中心以及回调机制,便于后续认证code或会话标识返回给注册应用。还需提供根据会话标识相关的资源接口,便于注册应用调用。

安全性:依靠第三方应用与APP的安全性,与客户端应用没有太大关系。

数据加密

像一些重要数据,比如用登录的账号密码、金钱、订单等数据用https传输时,依旧有可能被拦截监听,甚至https可能被解密,若其中的数据不加密的话,那就泄漏用户数据了,因此,有必要对这些重要数据进行加密传输。

对于浏览器,若第一次加载的话,本地是一片空白,网站的所有数据都要下载,即,若有对称加密的密钥,也有可能会被监听到。因此,一般加密传输采用对称加密AES和非对称加密RSA组合的方式来传输信息,AES加密表单信息,RSA加密AES的密钥。

请求加密:对于表单有重要信息提交的,比如登录或注册等表单。建议做法如下:

(1)接口参数建议直接用前端随机生成的AES密钥加密。

(2)AES的密钥再经过后端接口返回的RSA公钥加密(RSA密钥对更新周期看情况而定)。

(3)将加密的参数以及AES密钥发送到服务器。

(4)服务器先用RSA私钥解密出AES密钥,再用AES密钥解密出参数。

响应加密:对于有重要信息返回的,比如金额订单等。建议做法如下:

(1)响应数据直接使用随机生成的AES密钥加密。

(2)AES密钥用服务器的私钥加密。

(3)服务器将RSA公钥返回给前端,将AES密钥以及响应数据返回给前端。

(4)前端收到请求后,用公钥解密出AES密钥,再解密出响应数据。

响应加密的安全性比请求加密的安全性弱很多。主要受制于浏览器的数据没法私有保存,浏览器B端只能存RSA公钥,该公钥可以被监听到,因此窃听者也可能获取RSA公钥并对AES密钥解密进而对数据解密。

对于公钥,前后端可以通过对公钥按字典表置换数据或调换位置等操作来使公钥更安全。

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

函数式编程:Lambda 表达式

函数式编程:Lambda 表达式 每博一文案 曾经读过的依然令我感动的句子,生活总是不如意,但往往是在无数痛苦中,但往往是在无数痛苦中,在重重矛盾 和艰难中才能成熟起来,坚强起来,爱情啊&#xf…

EXCEL里的各种奇怪计算问题:数字后面自动多了 0.0001, 数字后面位数变成000,以及一些取整,数学函数

1 公式计算后的数,用只粘贴数值后,后面自动多了 0.0001,导致不再是整数的问题 问题入戏 见第1个8400,计算时就出现了问题,按正常,这里8400应该是整数,而不应该带小数,但是确实就计…

vmware虚拟机与树莓派4B安装ubuntu1804 + ros遇到的问题

如题所示,本人在虚拟机上安装ubuntu1804,可以很容易安装,并且更换系统apt源和ros源,然后安装ros,非常顺利,但是在树莓派4B上安装raspiberry系统就遇到了好多问题。 树莓派我烧录的是这个镜像:ub…

k8s-Kubernetes集群部署

文章目录前言一、Kubernetes简介与架构1.Kubernetes简介2.kubernetes设计架构二、Kubernetes集群部署1.集群环境初始化2.所有节点安装kubeadm3.拉取集群所需镜像3.集群初始化4.安装flannel网络插件5.扩容节点6.设置kubectl命令补齐前言 一、Kubernetes简介与架构 1.Kubernetes…

L - Let‘s Swap(哈希 + 规律)

2023河南省赛组队训练赛(四) - Virtual Judge (vjudge.net) 约瑟夫最近开发了一款名为Pandote的编辑软件,现在他正在测试,以确保它能正常工作,否则,他可能会被解雇!Joseph通过实现对Pandote上字符串的复制和…

断点调试(debug)

目录 F8案例 ​编辑 debug过程中报错 ​编辑用debug查看方法源码 一层一层查看 Arrays.sort()方法 F9 DebugExercise 介绍:断点调试是指在程序的某一行设置一个断电,调试时,程序运行到这一行就会停住,然后可以一步步往下调试…

项目实战典型案例17——环境混用来带的影响

环境混用来带的影响一:背景介绍背景出现的事故二:思路&方案环境混用的危害如何彻底避免环境混用的问题四:总结五:升华一:背景介绍 本篇博客是对对项目开发中出现的环境混用来带的影响进行的总结并进行的改进。目的…

JAVA后端部署项目三步走

1. JAVA部署项目三步走 1.1 查看 运行的端口 lsof -i:8804 (8804 为端口) 发现端口25111被监听 1.2 杀死进程,终止程序 pid 为进程号 kill -9 pid 1.3 后台运行jar包 nohup java -jar -Xms128M -Xmx256M -XX:MetaspaceSize128M -XX:MaxM…

基于半车悬架的轴距预瞄与轴间预瞄仿真对比

目录 前言 1. 半车悬架模型 2.轴距预瞄(单点预瞄)和轴间预瞄(两点预瞄)原理与仿真分析 2.1轴距预瞄(单点预瞄) 2.1.1预瞄原理 2.2.轴间预瞄(两点预瞄) 2.2.1预瞄原理 2.3仿真分析 3.总结 前言 对于悬架而言,四个车轮实际的输入信息是受到前后延时以及左右相…

Jetpack Compose 中的重组作用域和性能优化

只有读取可变状态的作用域才会被重组 这句话的意思是只有读取 mutableStateOf() 函数生成的状态值的那些 Composable 函数才会被重新执行。注意,这与 mutableStateOf() 函数在什么位置被定义没有关系。读取操作指的是对状态值的 get 操作。也就是取值的操作。 从一…

路由协议(OSPF、ISIS、BGP)实验配置

目录 OSPF基础实验 建立OSPF邻居 配置虚连接 配置接口的网络类型 配置特殊区域 配置路由选路 配置路由过滤 ISIS基础实验配置 配置ISIS邻居建立 配置认证 配置路由扩散 配置路由过滤 配置定时器 BGP基础实验配置 建立BGP对等体 建立IBGP对等体 建立EBGP对等体…

音频基础知识简述 esp-sr 上手指南

此篇博客先对音频基础知识进行简要叙述,然后帮助读者入门 esp-sr SDK。 1 音频的基本概念 1.1 声音的本质 声音的本质是波在介质中的传播现象,声波的本质是一种波,是一种物理量。 两者不一样,声音是一种抽象的,是声…

第二章Linux操作语法1

文章目录vi和vim常用的三种模式vi和vim快捷键Linux开机,重启用户管理用户信息查询管理who和whoami用户组信息查询管理用户和组的相关文件实用指令集合运行级别帮助指令manhelp文件管理类pwd命令ls命令cd命令mkdir命令rmdir命令rm命令touch命令cp指令mv指令文件查看类…

10.单点登录原理及JWT实现

单点登录原理及JWT实现 一、单点登录效果 首先我们看通过一个具体的案例来加深对单点登录的理解。案例地址:https://gitee.com/xuxueli0323/xxl-sso?_fromgitee_search 把案例代码直接导入到IDEA中 然后分别修改下server和samples中的配置信息 在host文件中配置 …

【Opencv项目实战】图像的像素值反转

文章目录一、项目思路二、算法详解2.1、获取图像信息2.2、新建模板2.3、图像通道顺序三、项目实战:彩图的像素值反转(方法一)四、项目实战:彩图的像素值反转(方法二)五、项目实战:彩图转换为灰图…

Spark Catalyst

Spark Catalyst逻辑计划逻辑计划解析逻辑计划优化Catalyst 规则优化过程物理计划Spark PlanJoinSelection生成 Physical PlanEnsureRequirementsSpark SQL 端到端的优化流程: Catalyst 优化器 : 包含逻辑优化/物理优化Tungsten : Spark SQL的优化过程 : 逻辑计划 …

pytorch安装的超级详细教程(没有之一)

一、发展历程 (简单介绍) (15年)caffe --> (16年)tensorflow1.x --> (17年)keras --> (18年)Tensorflow2.x --> (19年)pytorch。 面向gihub开源项目编程。 向下支持比较好,各个版本之间支持比较好,兼容性强。 版本…

自动驾驶介绍系列 ———— 看门狗

文章目录硬件看门狗软件看门狗差异分析延申窗口看门狗硬件看门狗 硬件看门狗的本质上是一个定时器电路。通常存在一个输入,输入到MCU的RST端。在正常工作状态下,MCU每隔固定时间间隔会输出一个信号给RST端,实现对看门狗端清零。如果在指定的时…

全网最全之接口测试【加密解密攻防完整版】实战教程详解

看视频讲的更详细:https://www.bilibili.com/video/BV1zr4y1E7V5/? 一、对称加密 对称加密算法是共享密钥加密算法,在加密解密过程中,使用的密钥只有一个。发送和接收双方事先都知道加密的密钥,均使用这个密钥对数据进行加密和解…

JAVA开发运维(nginx工作原理)

nginx源码目录结构: . ├── auto 自动检测系统环境以及编译相关的脚本 │ ├── cc 关于编译器相关的编译选项的检测脚本 │ ├── lib nginx编译所需要的一些库的检测脚本 │ ├── os 与平台相关的一些系统参数…