为什么需要这些认证

我们通过浏览器访问多数网站,本质上都可以理解为客户端(用户)和服务端(网站)之间的一次遵循http协议的请求和应答,比如:把a页面给我(返回a.html),删除b图片(删除b.jpg)。但是http协议本身是无状态的,也就是说我们每一次向网站发送请求,服务器都并不知道我们是谁、是否请求过、有何偏好(共享数据),所以需要一种验证机制将我们的所有请求关联起来。

session和cookie

在http协议之上,通过cookie实现了持久的会话,这个会话便称为session;
session是存储在服务端、用来验证用户身份的状态数据,具有唯一标识sessionId;
cookie是存储在客户端的用户身份数据,浏览器会自动加入服务端提供的sessionId。

验证流程:
1、客户端向服务端发送http请求;
2、服务端接受请求,建立一个session然后向客户端发送应答,其中应答的响应头Set-Cookie中包含sessionId;
3、客户端再次发送请求,如果之前有收到set-Cookie会将Cookie一起提交;
4、服务端再次接受请求,分解Cookie并验证消息,核对成功后发送应答。

验证缺点:
1、由于session保存在服务端,当用户基数很大的时候,为了保证认证效率需要消耗大量内存或缓存;
2、对于分布式系统,如果session一开始保存在A服务端,而客户端的下次请求被服务器负载均衡转发到了B服务端,则没办法通过认证(可以通过session共享来解决,即把所有session保存在一个服务器);
3、会受到CSRF跨站请求伪造攻击:session和cookie的验证方式只能保证请求来自我们的浏览器,却不能保证请求是我们自愿发出的。假如银行网站使用这种验证方式,在我们验证之后浏览器会暂时保存我们的登录状态,接着我们不小心浏览了包含以下恶意代码’'的钓鱼网站,这时浏览器就会使用我们的账户向银行发送转账申请(CSRF攻击没有直接窃取我们的账户或个人信息,但它利用session验证以我们的名义向网站发送请求)。

<img src="http://www.bank.com/pay?amount=1000&for=badguy">

token

token也称作令牌,相当于临时证书签名,由uid(用户唯一身份标识)、time(当前时间的时间戳)、sign(签名,使用hash/encrypt压缩的十六进制字符串)和parms(固定参数,可选)组成

验证流程:
1、客户端向服务端发送登录请求;
2、服务端接受请求,验证成功后返回Token;
3、客户端再次发送请求,将之前保存的Token加入header或作为表单一起提交;
4、服务端再次接受请求,验证Token成功后返回应答。
(token一般需要设置有效期,为了避免正常操作时token失效,一种对策是把token失效时间保存在缓存中,用户每操作一次就更新失效时间;另一种对策是token快失效时,通知前端通过refresh token重新申请)

优点
1、token是无状态的,所以只需要在成功的登录请求上对令牌进行签名,并验证传入的令牌是否有效;
2、可以很容易的对应分布式系统或者跨域访问(JWT);

以微信公众号爬虫为例,谈谈对session、cookie和token认证的理解相关推荐

  1. 【开源Python爬虫】微信公众号爬虫weixin_crawler开源啦

    作者 | 抽丝剥茧 出品 | 爱迪斯 微信公众号爬虫weixin_crawler开源啦 正式介绍weixin_crawler之前,我准备了两个问题,这两个问题通过weixin_crawler自带的报告 ...

  2. 基于Python实现微信公众号爬虫进行数据分析

    学爬虫有什么用 网络爬虫是一个非常注重实践性而且实用性很强的编程技能,它不是程序员的专属技能,任何具有一定编程基础的人都可以学习爬虫,写爬虫分析股票走势,上链家爬房源分析房价趋势,爬知乎.爬豆瓣.爬新 ...

  3. 微信公众号爬虫项目(reptile)

    代码仓库地址:reptile: 爬虫项目,微信公众号文章爬虫,网站文章爬虫,群发邮件系统 项目背景 个人在业余时间,写的一个以微信公众号爬虫为主要功能,普通网页爬虫.浏览器控制.邮件群发功能为辅的简单 ...

  4. 【Python爬虫实战】微信公众号爬虫:微信公众号浏览自动化

    本文内容详细介绍微信公众号历史文章自动化浏览脚本的实现,配合服务端对公众号文章数据爬取来实现微信公众号文章数据的采集.服务端爬取实现见:微信公众号爬虫:服务端公众号文章数据采集 背景:在团队的学习方面 ...

  5. Java微信公众号开发(一:接入平台,验证token)

    Java微信公众号开发(一:接入平台,验证token) 开发环境: 环境:JDK1.8 框架:springBoot 首先,在我们接入微信公众平台之前,我们需要注册微信公众号的开发者账号,获取开发者ID ...

  6. 使用搜狗接口对微信公众号爬虫

    搜狗搜索因为有微信公众号搜索的接口,所以通过这个接口就可以实现公众号的爬虫 需要安装几个python的库:selenium,pyquery 还使用到phantomjs.exe,这个需要我们自己去下载, ...

  7. 微信公众号爬虫,看这个就足够了

    我订阅了 253 个公众号,有时候想再找之前读过的文章,发现搜索起来特别困难,如果忘了收藏,估计得找半小时,更让人无语的是,文章已经发布者删除,或者文章因违规被删除.那么有没有这样的爬虫,可以将公众号 ...

  8. 微信公众号爬虫(综合解决方案)

    最终解决方案 通过搜狗微信先检索公众号,获取公众号主页链接,接着爬每一篇具体文章,具体用selenium实现,当然你也可以用webkit.Geoko渲染引擎自己去渲染.用selenium.webkit ...

  9. python微信公众号爬虫_Python爬取指定微信公众号所有文章!

    篇文章使用到的技术: mitmdump + 电脑版微信 先分析打开可视化抓包工具, 勾选https代理.然后打开电脑版微信 任意点击一个公众号,再点击查看历史消息 注:想学习Python的小伙伴们 可 ...

最新文章

  1. Entityframework:“System.Data.Entity.Internal.AppConfig”的类型初始值设定项引发异常。
  2. Elasticsearch2.x Cluster Health
  3. 添加java环境变量_【安装 JDK】 配置环境变量
  4. 政府数据集中异地备份概述
  5. Innodb中MySQL如何快速删除2T的大表
  6. 佳能g2810打印机扫描怎么用_办公用这款佳能彩色激光打印机无线MF643CDW就够了!...
  7. 【Nginx那些事】nginx配置实例(一)反向代理
  8. 倾斜摄影实景三维建模效果不好?可能有这些原因!
  9. 阶段5 3.微服务项目【学成在线】_day04 页面静态化_11-freemarker静态化测试-基于模板字符串静态化...
  10. 乐高ev3编程---书籍选择
  11. http请求接口开发的几种方式
  12. 自监督学习(Self-supervised Learning)的深刻理解
  13. Cocos野兽派 | 如何创造真正的优秀游戏
  14. nltk中文分句_如何使用nltk进行中文分词?
  15. Matplot X轴,Y轴最大值限定(固定X轴、Y轴的范围)
  16. UpdateData函数的用法
  17. linux常用bash命令介绍
  18. Hi3798 openSSH的移植
  19. 计算机等级考试怎么领取证书 领取方式
  20. Android事件分发-来龙去脉

热门文章

  1. 新春特辑 | 前沿技术专题合辑 报告下载
  2. 重庆邮电大学计算机学硕(802)考研初试经验贴
  3. 程序员买房指南——LZ的三次买房和一次卖房经历
  4. 【My Electronic Notes系列——逻辑函数的化简】
  5. docker ubuntu容器安装ping工具
  6. 十、不足两位用0补齐
  7. 狭隘型性格分析,如何改变狭隘型性格?
  8. 大数据培训之旅——Java-9(设计模式、Java Web)
  9. my97DatePicker选择年、季度、月、周、日
  10. 数据库人才招聘 | 大湾区国创中心工业软件发展中心