阔别了一阵,再次提笔,有些感慨。

聊聊Token吧,以前工作中总是遇到。

首先明确什么是token?

一些关键标签:服务端签发的一个字符串,客户端的请求令牌,用户第一次使用用户名密码登录后生成,在token的有效期内使用token登录无需用户名密码

明确之后我们来聊聊,token的生成及请求过程:

1、客户端带上用户名密码请求登录(前端校验通过)

2、服务器收到请求,校验用户名密码(服务端校验通过)

3、服务端签发token,并写进cookie发送给客户端

4、客户端收到token后会存入cookies或者LocalStorage中

5、客户端请求服务端每次都会携带这串token(具体携带方式:放消息体里,或者url直接携带)

6、服务端收到token后,验证通过,开始返回相应数据(验证不通过会返回错误信息)

7、token在服务端会设置一个有效期,每次请求都会验证是否token过期和token的有效性

  • 注意:token在url中被携带时注意浏览器的url截断问题,有可能会导致登录验证不通过(经验之谈,苹果设备上见过,尤其是从端跳H5)从测试角度去看的这个问题。

那为什么要用token?

1、支持跨域访问,token支持跨域访问,但cookie不支持

2、可以避开同源策略(后面会写写我理解的同源策略)

3、token是无状态的,可以多个服务器间共享(无状态在后面写写)

4、token可以避免CSRF攻击(跨站请求伪造)

5、易于扩展

扩展:

  那啥是CSRF呢?简单理解,就是攻击者盗用了你的身份信息,并完成以你的名义发起的恶意活动。至于多恶意,比如:转账!发邮件!购物!……

至于完成一次CSRF攻击必要的两个步骤:

  1、首先登了一个正常的网站A,并且在本地生成了cookie

  2、在cookie有效时间内,访问了危险网站B(就获取了身份信息)

Q:那我不访问危险网站就完了呗?

A:危险网站也许只是个存在漏洞的可信任网站!

Q:那我访问完正常网站,关了浏览器就好了呀?

A:即使关闭浏览器,cookie也不保证一定立即失效,而且关闭浏览器并不能结束会话,session的生命周期跟这些都没关系。

当然CSRF不在本次研究重点!

 啥是同源策略捏?就是不同源的客户端脚本在没有明确授权情况下,不准读写对方的资源!

问题来了:啥是源?

源就是协议,域名,端口号。

同源:就是url里的源都相同。(听着像废话!哈哈)

举例:http://www.abcd.com:80 

http://www.abcd.com/dir/index.html(同源)

http://www.ah.com/dir1/index.html(域名不同,不同源)

https://www.abcd.com/dir2/page.html(协议不同,不同源)

http://www.abcd.com:8888/dir3/page.html(端口号不同,不同源)

所以,如果假设a.com中的js脚本要是采用ajax去读写b.com中的资源文件数据是会报错滴!

但有不收同源策略限制的:1、页面中的连接,重定向及表单提交 2、跨域资源的引入可以,但js不能读写加载的内容,如:iframe,img,link,<script src=''>等等。

 那啥是跨域?想要操作另一个源下的对象就需要跨域!

至于怎么跨域,或者跨域的实现方式,咱们以后再讨论!

  易于扩展:比如有多台服务器,使用负载均衡,第一次登录转发到了A,A中seesion缓存了用户的登录信息,第二次登录转发到了B,这时候就丢失了登录状态,,当然这样也是有解决方案可以共享session,但token只需要所有的服务器使用相同的解密手段即可。

 无状态:服务端不保存客户端请求者的任何信息,客户端每次请求必须自备描述信息,通过这些信息来识别客户端身份。服务端只需要确认该token是否是自己亲自签发即可,签发和验证都在服务端进行。这里面其实涉及加密方法,后续讨论,给自己立个flag!

   有状态:我们说的cookie和session就是有状态的,第一次客户端请求,服务端产生session,然后将信息返回给浏览器,浏览器会将session中的关键数据,保存到本地的cookie中,然后每次客户端请求都会携带cookie去访问服务器,这时服务器就会拿出session中的内容和携带过来的cookie进行比较。

   缺点:服务器需要保存大量数据,给存储增加压力。服务端保存用户状态,很难水平扩展。客户端请求依赖服务器,多次请求必须访问同一台服务器(假设集群,就需要各个服务器之间共享数据),有状态登录的方式难以共享session,所以采用单点登录的方式。

请多指教,有啥新理解持续更新!

聊一聊Token的更多相关文章

  1. Aspnet Mvc 前后端分离项目手记(二)关于token认证

    在前后端分离的项目中,首先我们要解决的问题就是身份认证 以往的时候,我们使用cookie+session,或者只用cookie来保持会话. 一,先来复习一下cookie和session 首先我们来复习 ...

  2. spring cloud实战与思考(四) JWT之Token主动失效

    需求: JWT泄露.密码重置等场景下,需要将未过期但是已经不安全的JWT主动失效. 本文不再复述JWT的基础知识,不了解的小伙伴可以自行Google一下.这里主要是针对以上需求聊一聊解决方案.如果服务 ...

  3. 聊一聊Android的消息机制

    聊一聊Android的消息机制 侯 亮 1概述 在Android平台上,主要用到两种通信机制,即Binder机制和消息机制,前者用于跨进程通信,后者用于进程内部通信. 从技术实现上来说,消息机制还是比 ...

  4. 聊一聊Axios与登录机制

    前言 因为HTTP是一个stateless的协议,服务器并不会保存任何关于状态数据. 所以需要登录功能让服务器在以后请求的过程中能够识别到你的身份,而不是每次发请求都要输入用户名和密码. 下面介绍一下 ...

  5. 聊一聊如何用C#轻松完成一个TCC分布式事务

    背景 银行跨行转账业务是一个典型分布式事务场景,假设 A 需要跨行转账给 B,那么就涉及两个银行的数据,无法通过一个数据库的本地事务保证转账的 ACID ,只能够通过分布式事务来解决. 在 聊一聊如何 ...

  6. JWT中token的理解

    今天我们来聊一聊关于JWT授权的事情. JWT:Json Web Token.顾名思义,它是一种在Web中,使用Json来进行Token授权的方案. 既然没有找好密码,token是如何解决信任问题的呢 ...

  7. 记一次debug记录:Uncaught SyntaxError: Unexpected token ILLEGAL

    在使用FIS3搭建项目的时候,遇到了一些问题,这里记录下. 这里是发布搭建代码: // 代码发布时 fis.media('qa') .match('*.{js,css,png}', { useHash ...

  8. WebApi基于Token和签名的验证

    最近一段时间在学习WebApi,涉及到验证部分的一些知识觉得自己并不是太懂,所以来博客园看了几篇博文,发现一篇讲的特别好的,读了几遍茅塞顿开(都闪开,我要装逼了),刚开始读有些地方不理解,所以想了很久 ...

  9. 基于token的多平台身份认证架构设计

    基于token的多平台身份认证架构设计 1   概述 在存在账号体系的信息系统中,对身份的鉴定是非常重要的事情. 随着移动互联网时代到来,客户端的类型越来越多, 逐渐出现了 一个服务器,N个客户端的格 ...

随机推荐

  1. 题解:CF593D Happy Tree Party

    题解:CF593D Happy Tree Party Description Bogdan has a birthday today and mom gave him a tree consistin ...

  2. 学习ing

    1.从硬件和逻辑两个角度探讨什么是内存?硬件上看,内存就是电脑上的硬件--内存条.内存通过内存条不同的实现原谅分为DRAM(DRAM已经发展出好多代)和SRAM.从逻辑的角度来说,内存就是一个可以随机 ...

  3. sql查询:部门工资前三高的员工和部门工资最高的员工

    创建表:Create table If Not Exists Employee (Id int, Name varchar(255), Salary int, DepartmentId int);Cr ...

  4. js读取xml,javascript读取XML

    IE下示例代码: var xmlDoc = "<root><AlleyWay><Code>1103</Code><Name>胡同2 ...

  5. Python 从入门到精通:一个月就够了

    毫无疑问,Python 是当下最火的编程语言之一.对于许多未曾涉足计算机编程的领域「小白」来说,深入地掌握 Python 看似是一件十分困难的事.其实,只要掌握了科学的学习方法并制定了合理的学习计划, ...

  6. Callable接口

    Callable与Runnable的不同区别在于: 1.Callable有返回值 Runnable没有返回值 2.Callable需要实现的方法是call方法       Runnable需要实现的方 ...

  7. Windows搭建Hexo系统

    date: 2018-11-16 17:10:51 updated: 2018-11-16 20:04:43 1.安装Git 下载Windows下的Git客户端并安装,安装很简单,基本一路Next下去 ...

  8. 【论文阅读】An Empirical Study of Architectural Decay in Open-Source Software

    2020-06-19这篇文章是我学习 软件架构与中间件 课程时分享的论文.可以说,这篇文章塑造了我基本的科研观,也养成了我如今看论文的习惯.感谢老师们,也感谢恒恒对我的帮助. 论文地址: https: ...

  9. 【转】Optimized Surface Loading and Soft Stretching

    FROM:http://lazyfoo.net/tutorials/SDL/05_optimized_surface_loading_and_soft_stretching/index.php Opt ...

  10. pandas对列求和

    了解更多,请关注公众号"轻松学编程" 一行代码实现对列求和 使用pandas把列表中的字典元素转成二维数组,然后使用pandas函数实现对每一列求和. 代码: import pan ...