Cookie

服务器端生成,发送给客户端,保存用户信息。下一次请求同一网站时会把该cookie发送给服务器。

应用:登录表单自动填充,同样

随着交互式Web应用的兴起,像在线购物网站,需要登录的网站等等。马上就面临一个问题,那就是要管理会话,必须记住哪些人登录系统, 哪些人往自己的购物车中放商品, 也就是说我必须把每个人区分开。

session id

想出的办法就是给大家发一个会话标识(session id), 说白了就是一个随机的字串,每个人收到的都不一样, 每次大家向我发起HTTP请求的时候,把这个字符串给一并捎过来, 这样我就能区分开谁是谁了。

问题:

  • 每个人只需要保存自己的session id,而服务器要保存所有人的session id (存储问题)

  • 服务器扩展能力受限,两个服务器组集群的时候,session需要复制

    【session单独部署一台服务器,又会导致单点故障问题,部署集群在成本上花费太多】

Token

token本质是用CPU的计算时间换取session的存储空间。

Token验证流程:

小A登录系统,服务器向客户端发送一个令牌(Token),Token的形成过程:将user id ,密钥,通过HMAC-SHA256 算法,生成签名,将签名和数据一起作为Token。

当小A再次发送请求时,请求头就会带有Token,服务器对user id和密钥再次进行计算,和签名比较,验证用户身份。

在Web领域基于Token的身份验证随处可见。在大多数使用Web API的互联网公司中,tokens 是多用户下处理认证的最佳方式。

大部分你见到过的API和Web应用都使用tokens。例如Facebook, Twitter, Google+, GitHub等。

Token特性:

•无状态、可扩展

•支持移动设备

•跨程序调用

•安全

JWT——Token的实现

JWT:JSON Web Token

包含三个部分

  • header:描述JWT元数据,定义生成签名算法以及Token类型
  • Payload(负载):存放需要传递的数据
  • Signature:服务器通过PayloadHeader和一个密钥(secret)使用 Header 里面指定的签名算法(默认是 HMAC SHA256)生成

常见问题

用户修改密码后Token更新问题

使用 用户的密码的哈希值对 token 进行签名。因此,如果密码更改,则任何先前的令牌将自动无法验证。

OAuth2.0

OAuth 2.0 是目前最流行的授权机制,用来授权第三方应用,获取用户数据。

(应用中集成第三方登录,微信,QQ,微博等等)

四种授权方式:

  • 授权码(authorization-code)
  • 隐藏式(implicit)
  • 密码式(password):
  • 客户端凭证(client credentials)

参考文档:

https://mp.weixin.qq.com/s?__biz=Mzg2OTA0Njk0OA==&mid=2247485603&idx=1&sn=c8d324f44d6102e7b44554733da10bb7&chksm=cea24768f9d5ce7efe7291ddabce02b68db34073c7e7d9a7dc9a7f01c5a80cebe33ac75248df&token=844918801&lang=zh_CN#rd

Cookie,Session,Token and Oauth的更多相关文章

  1. 傻傻分不清之 Cookie、Session、Token、JWT

    傻傻分不清之 Cookie.Session.Token.JWT 什么是认证(Authentication) 通俗地讲就是验证当前用户的身份,证明“你是你自己”(比如:你每天上下班打卡,都需要通过指纹打 ...

  2. 还分不清 Cookie、Session、Token、JWT?一篇文章讲清楚

    还分不清 Cookie.Session.Token.JWT?一篇文章讲清楚 转载来源 公众号:前端加加 作者:秋天不落叶 什么是认证(Authentication) 通俗地讲就是验证当前用户的身份,证 ...

  3. 授权认证登录之 Cookie、Session、Token、JWT 详解

    一.先了解几个基础概念 什么是认证(Authentication) 通俗地讲就是验证当前用户的身份. 互联网中的认证: 用户名密码登录 邮箱发送登录链接 手机号接收验证码 只要你能收到邮箱/验证码,就 ...

  4. Cookie、Session、Token、JWT

    什么是认证(Authentication)------->就是验证当前用户的身份,证明"你是你自己" 互联网中的认证: 用户名密码登录 邮箱发送登录链接 手机号接收验证码 只 ...

  5. 为什么你学不会递归?告别递归,谈谈我的一些经验 关于集合中一些常考的知识点总结 .net辗转java系列(一)视野 彻底理解cookie,session,token

    为什么你学不会递归?告别递归,谈谈我的一些经验   可能很多人在大一的时候,就已经接触了递归了,不过,我敢保证很多人初学者刚开始接触递归的时候,是一脸懵逼的,我当初也是,给我的感觉就是,递归太神奇了! ...

  6. cookie,session,token之间的联系与区别

    发展史 1.很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新的HTTP协议, 就是请求加响应,  尤其是我不用 ...

  7. 理解cookie,session,token

    彻底理解cookie,session,token 发展史 1.很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新 ...

  8. 理解 Cookie,Session,Token 并结合 Redis 的使用

    Http 协议是一个无状态协议, 客户端每次发出请求, 请求之间是没有任何关系的.但是当多个浏览器同时访问同一服务时,服务器怎么区分来访者哪个是哪个呢? cookie.session.token 就是 ...

  9. Cookie,Session,Token详解

    Cookie,Session,Token详解 Cookie : ​ 是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能. ​ Cookie由服务器生成,发 ...

  10. [转帖]彻底理解cookie,session,token

    彻底理解cookie,session,token https://www.cnblogs.com/moyand/p/9047978.html 发展史 1.很久很久以前,Web 基本上就是文档的浏览而已 ...

随机推荐

  1. Vertx和Jersey集成使用

    为了更好地解耦和提高性能,一般将工程的接口部分剥离出来形成一个单独的工程,这样不仅能提高性能,增强可维护性,并且在后台工程宕掉的话对客户端接口的影响较小. 公司使用了Vertx和Jersey,Vert ...

  2. SVN每日定时备份脚本

    SVN每日定时备份脚本: @ECHO off REM SVN安装目录 SET SVN_HOME="D:\Program Files\VisualSVNServer" REM 版本库 ...

  3. ios--NavigationViewController跳转、返回传值

      使用NavigationViewController进行页面跳转时,应该使用pushViewController方法来跳转至下一页面,这样的话,下一页面同样在NavigationViewContr ...

  4. SQL的简单函数(极客时间)

    SQL的函数 函数就是将我们经常使用的代码封装起来, 需要的时候直接调用, 提高代码效率和可维护性. SQL函数一般是在数据上执行, 可以方便地转换和处理数据. 常用的SQL函数 SQL提供了一些常用 ...

  5. 奇怪的ifcfg-eth0被自动还原

    最近,一台虚拟机是从外网下载的,然后导入本地测试环境使用. 发现一个奇怪的问题:修改了 /etc/sysconfig/network-scripts/ifcfg-eth0 保存后, 重启网络服务( s ...

  6. PostgreSQL limit

    1. select * from my_table limit 10 offset 5 数据是从第0条开始的,所以这句代码表示从 第六条数据开始的10行数据. 2. select * from my_ ...

  7. Delphi-基础(例程、例程返回值)

    一.例程:Delphi中独有的称呼,例程是将具体某个功能的代码进行封装表现形式: 1.过程 2.函数 过程和函数的区别在于有没有返回值二.例程的作用 1.可以解决命名冲突问题 2.提高代码的重复使用率 ...

  8. 19、FTP服务器

    FTP (File Transfer Protocol) 文件传输协议的简称.主要用跨网络.跨平台的文件 传输.   FTP 支持两种工作工作模式:主动模式.被动模式.     主动模式: 客户端使用 ...

  9. 【MySQL高可用架构设计】(一)-- mysql复制功能介绍

    一. 介绍 Mysql的复制功能是构建基于SQL数据库的大规模高性能应用的基础,主要用于分担主数据库的读负载,同时也为高可用.灾难恢复.备份等工作提供了更多的选择. 二.为什么要使用mysql复制功能 ...

  10. 关于k8s集群证书1年过期后,使用kubadm重新生成证书及kubeconfig配置文件的变化

    这个证书很重要,不用说. 但手工生成证书,确实工作量大且容易出错. 推荐的方式,是保留/etc/kubernetes/pki目录下的ca.crt,ca.key,sa.crt,sa.key. 这四个文件 ...