开发学长经常说的鉴权,究竟是什么玩意?

前几个月,工作中遇到一个让人抓狂的事情,客户端向服务器提交数据,因为受服务器带宽限制,所以上传速度较慢,导致上传数据时间大于服务器session过期时间,结果可想而知,数据当然没有上传成功。

解决上面的办法有很多,站在笔者观点,我觉得可以通过以下方法几种解决:

1、上传速度慢,增加服务器带宽不就搞定了吗。但增加服务器带宽又不是每个领导愿意做的事情,因为费用摆在那边。

2、延长服务器session过期时间。

3、同一个浏览器内,复制相同窗口,比如A窗口在上传数据,B窗口在session快过期时,向服务器提交一个请求,这样session时间被刷新为初始值。可以解决session过期问题。

当然解决问题的方法还有很多,这里就不在多说。上面的1/2两点,暂时不多谈,我们重点说说第3点,能自己解决的,尽量自己去解决。为什么我会采用这种方法?接下来就进入今天的主题---鉴权。

我们都知HTTP是无状态协议。举个例子,你输入账号,密码,点击登录进入后台管理系统。这个时候你刷新一下页面,又要输入账号密码,想想是不是很麻烦?

所以为了解决这个问题,引入了cookie的概念。输入账号密码登录成功之后,服务器Set-cookie,服务器把cookie发送给浏览器,浏览器保存cookie,下次向服务器请求时,在HTTP请求头中加入这个cookie,这样服务器就知道你是谁,并且返回给想要的内容。

但是呢,我们都知道cookie内容相对暴露,安全性上来说,不是那么高,所以讲讲今天的主人公---session。

简单说一下session。我们先记住2个点,一个是session,一个是SessionID。很多欧美电影,都有一个神奇的屋子。你拿着钥匙,到这个神奇的屋子,给工作人员展示你的钥匙,工作人员不会多问一句,直接告诉你,你的储物柜在哪。SessionID类似于钥匙,session类似于储物柜。下面画个图让大家更清楚的了解下(时间紧迫,2分钟画的,勿喷)。

开发GG经常说的鉴权,究竟是什么玩意?

根据这个图,大概可以猜出session工作方式。客户端向服务器提交账号、密码,服务器从数据库里面去查是否有这个用户,有这个用户的话,创建一个session,并返回给客户端一个sessionID,客户端下次向服务器提交请求时,带上这个sessionID,根据sessionID去服务器找对应的session,注意,这里一个 sessionID对应一个session 。

找到这个session后,服务端给浏览器一个可识别的内容,可能是HTML页面,也有可能是json数据。如果没找到这个session,会提示你登录失败相关信息。

那么这个时候问题来了,公司一开始只用一台服务器A,但是后面用户量增大,增加几个服务器,采用集群模式。用户访问服务器A,session是储存在服务器A里面的,这个时候服务器A挂了,用户访问其他服务器,需要重新登录。想想看是不是很麻烦?那么有没有办法解决这个问题呢?很明显是有的,可以采用两种方式:

1、把session持久化到数据库

2、把session放到Redis里面。

如果服务器A挂了,没关系,我从数据库访问就是了。(集群、持久化这两个概念笔者认为比较重要)有上面可以得出,sessionID贼重要,那么我们来想一下,怎么得到这个sessionID呢?这个时候需要引入一个概念,xss攻击(跨站脚本攻击)。

说一下xss攻击原理,恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。

也就是说,如果被xss攻击了,那么别人就得到了你的cookie,得到了你的cookie也就得到了你的sessionID,那么问题又来了,别人得到你的sessionID可以做哪些事呢?这个问题留给大家考虑。

其实我今天最想说的是JWT鉴权,但是不知不觉已经这么多字了,所以留到下次分享把。老规矩,以上内容仅代表个人观点,如有不到之处,还请海涵,如果你喜欢我的文章,可以留言一起讨论。

最后,祝大家周末愉快。

上面是我收集的一些视频和面试题资料。

对于软件测试的的朋友来说应该是最全面最完整的面试备战仓库,为了更好地整理每个模块,我也参考了很多网上的优质博文和项目,力求不漏掉每一个知识点,很多朋友靠着这些内容进行复习,拿到了BATJ等大厂的offer,这个仓库也已经帮助了很多的软件测试的学习者,希望也能帮助到你

关注我的微信公众号【程序员二黑】免费获取
 

猜你喜欢

转载自blog.csdn.net/weixin_54696666/article/details/115016392