接口测试基础——session认证和token认证
总算是把这个过程理清楚了,现在我们的思路是:what?why?How?,实际上这些个机制产生的内部逻辑是从下至上的的:遇到问题了,想办法解决,总结归纳并取名。从解决一些小问题开始生长,不断打补丁直至完善。学习接口,永远有个认识:这是客户端 和 服务器的之间的交流,可以类别为 用户 和 超市!
什么是session?
Http协议是无状态的,Session是一种让请求从无状态变成有状态的机制,实现session的方式有很多种,通过地址栏,借助cookie(cookie就是存在浏览器里的一些信息,以一个文件夹的形式存在,里面的信息是由服务端产生的)。
基于session的身份认证
借助cookie,客户端登陆成功后,服务端就能识别其后续请求,而不需要每次都登陆。
为解决数据被篡改的问题:
一种是把cookie里面的内容加密,但这种方法有两个缺点:1)cookie的大小是有限制的,2)加密方式以及密钥有泄露的风险
另一种方法是通过一个ID来辨别身份,这个ID称之为seesion id,Server只在Cookie里面存一个Session id,其余的状态都存在Server那边,可以存在数据库或内存里。其具体的认证过程如下:
1) 客户端登陆,一般输入用户名和密码
2) 服务端如果验证通过,生成session,并把它存入数据库中,并将其中的session id存放在Set-Cookie当中发给客户端
3) 客户端接收到Set-Cookie,在浏览器上会产生cookie,并把session id写入
4) 客户端后续有新的请求,都会在请求后携带sessIon id,发给服务端,服务端进行验证
5) 如果客户端登陆出去(log out),该生成的session就会在客户端和服务端都被销毁
基于session认证的不足
服务端存储每个用户的session,当用户很多时,需要大量的资源
不能很好解决跨域资源共享问题
什么是Token?
token的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识。
简单token的组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,token的前几位以哈希算法压缩成的一定长度的十六进制字符串,为防止token泄露)。
基于token机制的身份认证
Token是服务端用自己的密钥签名的,当它收到客户带有Token的请求时,只需要再用自己的密钥去验证,就可以判断这个Token是不是自己签发的。这里面的核心就是用签名和验证,从而减轻了服务端的负担,无需再存储session。大概的流程:
1) 客户端使用用户名和密码请求登录
2) 服务端验证,验证通过,生成Token返还给客户端(一般用哈希算法,再加个随机数)。
3) 客户端收到token后把它存储起来,可以放在cookie或者Local Storage(本地内存)里
4) 客户端以后每次向服务端发送请求的时候都需要带上该token。
5) 服务端收到请求时验证Token,如果验证通过,则允许用户访问相应资源)
token认证与session认证的区别
token认证中,服务端不会保存token,再次访问只会对token中携带的信息进行验证,session认证服务器会给每一个session分配唯一的session id保存在服务端的数据库中,再次访问时浏览器通过cookie把session id传回给服务器,服务器根据session id找到第一次登陆时所分配的session对象
使用基于Token认证可以使API应用到不同的服务和域中
接口测试基础——session认证和token认证的更多相关文章
- 034.认证方式 | 基本认证 、Token认证、 AK/SK认证
认证方式 关于认证: https://www.cnblogs.com/badboyh2o/p/11068779.html https://www.cnblogs.com/badboyh2o/p/110 ...
- ASP.NET WebApi 基于分布式Session方式实现Token签名认证
一.课程介绍 明人不说暗话,跟着阿笨一起学玩WebApi!开发提供数据的WebApi服务,最重要的是数据的安全性.那么对于我们来说,如何确保数据的安全将会是需要思考的问题.在ASP.NETWebSer ...
- ASP.NET WebApi 基于分布式Session方式实现Token签名认证(发布版)
一.课程介绍 明人不说暗话,跟着阿笨一起学玩WebApi!开发提供数据的WebApi服务,最重要的是数据的安全性.那么对于我们来说,如何确保数据的安全将会是需要思考的问题.在ASP.NETWebSer ...
- Cookie、Session和Token认证
目录 Cookie Session认证机制 Session的一些安全配置 Token认证机制 Token预防CSRF Session认证和Token认证的区别 前言:HTTP是一种无状态的协议,为了分 ...
- 基于Token认证的多点登录和WebApi保护
在文章中有错误的地方,或是有建议或意见的地方,请大家多多指正,邮箱: linjie.rd@gmail.com 一天张三,李四,王五,赵六去动物园,张三没买票,李四制作了个假票,王五买了票,赵六要直接F ...
- Java实现基于token认证
随着互联网的不断发展,技术的迭代也非常之快.我们的用户认证也从刚开始的用户名密码转变到基于cookie的session认证,然而到了今天,这种认证已经不能满足与我们的业务需求了(分布式,微服务).我们 ...
- flask token认证
在前后端分离的项目中,我们现在多半会使用token认证机制实现登录权限验证. token通常会给一个过期时间,这样即使token泄露了,危害期也只是在有效时间内,超过这个有效时间,token过期了,就 ...
- laravel5.7 前后端分离开发 实现基于API请求的token认证
最近在学习前后端分离开发,发现 在laravel中实现前后台分离是无法无法使用 CSRF Token 认证的.因为 web 请求的用户认证是通过Session和客户端Cookie的实现的,而前后端分离 ...
- python 全栈开发,Day97(Token 认证的来龙去脉,DRF认证,DRF权限,DRF节流)
昨日内容回顾 1. 五个葫芦娃和三行代码 APIView(views.View) 1. 封装了Django的request - request.query_params --> 取URL中的参数 ...
随机推荐
- 杨辉三角 js 练习
//打印杨辉三角a[[],[],[]] function fn(n){ //i=0 1 2 3.. var a = new Array(n); //行 1 2 3 4.. 创建二维数组. for(va ...
- CollectionView的cell长按事件实现
原生cell没有长按事件,我们需要使用手势识别来绑定CollectionView.创建并绑定CollectionView如下: (void)viewDidLoad { [super viewDidLo ...
- [PyQt5]文件对话框QFileDialog的使用
概述选取文件夹 QFileDialog.getExistingDirectory()选择文件 QFileDialog.getOpenFileName()选择多个文件 QFileDialog.getOp ...
- 深度解密 Go 语言之 sync.map
工作中,经常会碰到并发读写 map 而造成 panic 的情况,为什么在并发读写的时候,会 panic 呢?因为在并发读写的情况下,map 里的数据会被写乱,之后就是 Garbage in, garb ...
- 使用python解线性矩阵方程(numpy中的matrix类)
这学期有一门运筹学,讲的两大块儿:线性优化和非线性优化问题.在非线性优化问题这里涉及到拉格朗日乘子法,经常要算一些非常变态的线性方程,于是我就想用python求解线性方程.查阅资料的过程中找到了一个极 ...
- Python中和迭代有关的两个函数next()和iter()
next(): next()返回迭代器的下一个项目 next语法: next(iterator[,dafault]) iterator -- 可迭代对象 default -- 可选,用于设置在没有下一 ...
- 关于margin外边距合并的问题
一 .兄弟元素margin外边距合并演示 当两个垂直方向相邻的兄弟元素都为常规流块盒,他们之间垂直方向的外边距不是两者之和,而是取两者中的最大值.这种现象被称为相邻的兄弟元素垂直方向外边距合并. ...
- JSON Web令牌(JWT)介绍与使用
手机端接口开发会遇到一个问题是,接口登录后需要返回一个Token.token首先有一点必须唯一,每次请求都需要把token给带上.基于必须唯一的特性,很多朋友在开发是都选择了uuid.是不是token ...
- Jmeter(十二) - 从入门到精通 - JMeter逻辑控制器 - 终篇(详解教程)
1.简介 Jmeter官网对逻辑控制器的解释是:“Logic Controllers determine the order in which Samplers are processed.”. 意思 ...
- maven中pom.xml中配置整理: groupId、artifactId、parent、dependency、dependencyManagement区别
<groupId>com.mycompany.commonmaven</groupId> <artifactId>commonmaven</artifactI ...