接口基础第四篇:鉴权
一.接口鉴权机制详解
1.Cookie
cookie是保存在本地终端的数据。cookie由服务器生成,发送给浏览器,浏览器把cookie以key-value形式保存到某个目录下的文本文件 内,下一次请求同一网站时会把该cookie发送给服务器。由于cookie是存在客户端上的,所以浏览器加入了一些限制确保cookie不会被恶 意使用,同时不会占据太多磁盘空间,所以每个域的cookie数量是有限的。 cookie的组成有:名称(key)、值(value)、有效域(domain)、路径(域的路径,一般设置为全局:"")、失效时间、安全标志(指定后,cookie 只有在使用SSL连接时才发送到服务器(https))
2.Session
会话,代表服务器与浏览器的一次会话过程,这个过程是连续的,也可以时断时续。 cookie中存放着一个sessionID,请求时会发送这个ID; session因为请求(request对象)而产生; session是一个容器,可以存放会话过程中的任何对象; session的创建与使用总是在服务端,浏览器从来都没有得到过session对象; session是一种http存储机制,目的是为http提供持久机制。
通俗讲:session是在服务端保存,可以用于记录客户状态,比如我们经常会用session保存客户的基本信息、权限信息等;用户第一次登 录之后,服务器就会创建一个session,浏览器再次访问时,只需要从该session中查找该客户的信息就可以了。
3.Cookie与Session区别
cookie数据存放在客户端上,session数据放在服务器上; cookie不是很安全,且保存数据有限; session一定时间内保存在服务器上,当访问增多,占用服务器性能。
4.Cookie和Session的用途
我们访问网站都是通过HTTP协议或HTTPS协议来完成的,HTTP协议它本身是无状态的协议(即:服务器无法分辨哪些请求是来源于同个 客户)。而业务层面会涉及到客户端与服务器端的交互(同网站下多个页面间能共享数据),此时服务器端必须要保持会话状态,这样才 能进行用户身份的鉴别。
由于HTTP无状态的特性,如果要实现客户端和服务器端的会话保持,那就需要其它机制来实现,于是Cookie和Session应运而生。
4.1Cookie鉴权机制
最开始,使用Cookie单独实现用户的鉴权,userid分别保存在客户端的Cookie,以及服务器的数据库里。服务器数据库里的userid是固定 的,这样一旦客户端的Cookie信息泄露,就可以伪装成用户进行操作,很不安全。
4.2Cookie+Session鉴权机制
为了解决安全性的问题,将Session和Cookie搭配在一起使用。
4.3Token与Token鉴权
客户端浏览器只要保存自己的SessionID即可,而服务器却要保存所有用户的Session信息,这对于服务器来说开销较大,而且不利用服务 器的扩展(比如服务器集群时,Session如何同步存储就是个问题)!
关键点就是验证
Token俗称为“令牌”,它的构成是:
uid:用户唯一身份标识
timestamp:当前时间戳
sign:签名字符串,防止第三方伪造数据;签名密钥是存储在服务器端的,其它人无法知道
其它附加参数。
Token机制下的认证流程 Token机制其实和Cookie机制极其相似,主要有以下流程:
1、用户登录进行身份认证,认证成功后服务器端生成Token返回给客户端;
2、客户端接收到Token后保存在客户端(可保存在Cookie、LocalStorage、SessionStorage中);
3、客户端再次请求服务器端时,将Token作为请求头放入Headers中;
4、服务器端接收请求头中的Token,将用户参数按照既定规则再进行一次签名,两次签名若一致则认为成功,反之数据存在篡改请求失 败。
这样一来, 服务器就不保存session id 了, 服务器只是生成token , 然后验证token , 服务器用服务器的CPU计算时间获取了服务器的 session 存储空间
解除了session id这个负担, 可以说是无事一身轻, 服务器的机器集群现在可以轻松地做水平扩展, 用户访问量增大, 直接加机器就 行。
总结
cookie:保存在浏览器种,有大小限制,有状态;
session:保存在服务器中,服务器有资源开销,分布式、跨系统不好实现;
Token:客户端可以将Token保存到任何地方,无限制,无状态,利于分布式部署。
本文来自博客园,作者:术科术,转载请注明原文链接:https://www.cnblogs.com/shukeshu/p/15847086.html