当下,JWT(JSON Web Token)令牌认证已经变得越来越流行。本文主要介绍JWT令牌认证与传统的Session会话认证机制的区别。

为什么需要认证?

HTTP是一种无状态协议,那就意味着当前的客户端的请求与任何之前的请求是独立不依赖的,而服务器也并不会记录任何请求信息。例如,如果你只是简单地访问静态页面(例如访问 www.yiidian.com ),服务器实际上不需要知道客户端是谁,而只会给客户端返回纯粹的页面内容。另一方面,如果你想在Facebook上进行资料上的更改,则必须向一点教程网服务器证明你是该帐户的拥有者。简而言之,您需要先验证自己的身份,然后服务器才能为你提供访问敏感信息的权限。在了解JWT认证之前,我们先来看看传统的Session会话认证吧。

Session会话认证

在Session会话认证模型中,在用户登录并授权后,服务器将创建客户端唯一的Session。服务器将Session ID返回给客户端,然后客户端将其存储在浏览器的cookie中。在随后的HTTP调用中,cookie将自动包含在HTTP请求头中,服务器将通过cookie中记录的Session ID得知客户端的身份。尽管cookie存储在客户端,但是由于验证是在服务器上完成的,因此该认证模型属于服务器端会话。说到这里,您可能会想:HTTP协议不是无状态的么?那服务器如何记住客户端的身份?

服务器端会话:实际上不是无状态的

从技术上讲,HTTP无状态协议不会禁止服务器存储信息。大多数Web应用程序都需要存储某种形式的状态,以便知道客户端的Session ID是否有效。例如,服务器可能会把Session ID存储在服务器内存,这样,只要先前经过身份验证的客户端再次发出请求,服务器就可以简单地在内存查找Session ID,并验证客户端是否已经通过了身份验证。

Session认证的优点

  • Session ID有过期时间
  • Session ID可以被撤销/删除
  • Cookie的数据量少,存储Session ID非常轻便

Session认证的缺点

  • 分布式/跨服务器架构 中的Session ID共享问题

在分布式架构中,客户端在其中一台服务器验证通过后,Session ID只会存储在当前服务器中,当客户端访问其他服务器时,并不能查找到之前的Session ID,这样就无法正常验证了。为了确保所有服务器具有相同Session ID,其中一种方法是让所有服务器使用共享的Redis缓存(如上图所示)。

JWT令牌认证

在JWT(JSON Web Token)认证模型中,服务器不会在用户登录后返回Session ID,而是将签名(加密)的Token字符串返回给客户端。此签名的Token本质上是一个JSON对象,其中包含服务器使用私钥或公钥/私钥签名的身份验证信息。

在后续的HTTP请求中,客户端只需要在请求中传递该JWT加密字符串,并且确保每个服务器实例都可以解密Token并验证用户身份。

JWT的优点

无需使用缓存/数据库来存储Session ID

JWT的缺点

无法从服务器撤消Token,服务器只能确定Token是否有效

本文首发微信公众号:一点教程。欢迎关注公众号,获得独家整理的学习资源和日常干货推送。

如果您对我的系列教程感兴趣,也可以关注我的网站:yiidian.com

什么是JWT令牌认证?相关推荐

  1. .NET Core + JWT令牌认证 + Vue.js 通用动态权限(RBAC)管理系统框架[DncZeus]开源啦!!!...

    DncZeus 前言 关于 DncZeus DncZeus = Dnc + Zeus "Dnc"--.Net Core 的缩写: "Zeus"--中文译为宙斯, ...

  2. 开源干货!.NET Core + JWT令牌认证 + Vue.js通用动态权限(RBAC)管理系统框架[DncZeus]开源

    DncZeus 前言 关于 DncZeus DncZeus = Dnc + Zeus "Dnc"–.Net Core 的缩写: "Zeus"–中文译为宙斯,是古 ...

  3. 请求令牌 接口_时序图说明JWT用户认证及接口鉴权的细节

    JWT用户认证及接口鉴权的细节以及原理 一.回顾JWT的授权及鉴权流程 在笔者的上一篇文章中,已经为大家介绍了JWT以及其结构及使用方法.其授权与鉴权流程浓缩为以下两句话: 授权:使用可信用户信息(用 ...

  4. Spring Cloud Feign如何实现JWT令牌中继以传递认证信息

    在上一篇实现了Spring Cloud资源服务器的定制化,但是又发现了一个新的问题,Spring Cloud微服务调用的过程中需要令牌中继.只有令牌中继才能在调用链中保证用户认证信息的传递.今天就来分 ...

  5. Day241242.单点登录方案【Jwt令牌、sessionredis、CAS认证服务器】 -springsecurity-jwt-oauth2

    1.单点登录与状态共享方案 随着企业的应用规模不断增大,一个单体应用很难满足用户量增长的需求,这就需要我们将单体应用集群化部署,或者将单体应用微服务化.在这个过程中,就涉及到两个问题: 集群应用之间如 ...

  6. 从零开始超详细的Spring Security OAuth2.0实现分布式系统授权(注册中心+网关+认证授权服务(JWT令牌验证)+资源调用服务)

    文章目录 一.OAuth2.0 1.介绍 2.例子 3.执行流程 二.Spring Cloud Security OAuth2 1.环境介绍 2.认证流程 三.整合分布式项目 1.技术方案 2.项目结 ...

  7. Spring Security OAuth2.0认证授权三:使用JWT令牌

    历史文章 [Spring Security OAuth2.0认证授权一:框架搭建和认证测试] [Spring Security OAuth2.0认证授权二:搭建资源服务] 前面两篇文章详细讲解了如何基 ...

  8. php vue jwt 实战,Vue路由之JWT身份认证的实现方法

    一.JWT身份认证简介 JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案,相较于session机制,服务器就不需要保存任何 session 数据了,也就是说,服务器变成无状态了 ...

  9. 肝!一文讲解JWT用户认证全过程

    什么是JWT(what) JWT(JSON Web Token)是一个开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,以JSON对象的形式在各方之间安全地传输信息. JWT是一个数字签名 ...

最新文章

  1. android 创建隐藏文件夹吗,Android创建隐藏文件可能文件夹
  2. (转) SpringBoot非官方教程 | 第二篇:Spring Boot配置文件详解
  3. python 字典+列表集合+文件读取
  4. sshd_config 中文手册
  5. MONGODB 集群架构 调整,增加延迟备份节点服务器,删除仲裁节点
  6. win7 + vs2015+ matlab2016a + python3.5安装matcaffe cpu版本
  7. mysql用户阻塞数_MySQL实例阻塞分析一例(线程statistics状态)
  8. c6011取消对null指针的引用_COM编程攻略(二十二 IDL中的枚举,指针,数组)
  9. 【洛谷2624】[HNOI2008] 明明的烦恼(Python+利用prufer序列结论求解)
  10. [转]SQL中的case when then else end用法
  11. vue+ 下拉框有选择项 点击选项也拿到值就是页面不显示选中项
  12. poj 1056 IMMEDIATE DECODABILITY trie树 ——字典树 静态数组版
  13. 纯CSS实现二级下拉导航菜单
  14. favicon.ico在线转换网站
  15. ES与分布式系统(一)
  16. 数学建模最新教育数据分享及数据查询方法(数据来源:世界银行、世界数据图册、联合国教科文组织、国家统计局)
  17. macunity日志目录_Unity-日志文件
  18. Git与bitbucket简单使用
  19. 内容即广告是最好的移动商业模式?
  20. 感觉各种知道,问答,百科的真实性和可信性都被网络营销给搞坏了

热门文章

  1. 基于AidLux平台实现智慧社区中高空抛物和车辆车牌识别
  2. 解决word插入Endnote引文闪退问题
  3. PostgreSQL citus python环境搭建
  4. SystemVerilog: Dynamic part-select and array slicing
  5. 黑马程序员——0C语言——基础语法
  6. 基于Java毕业设计新闻采编系统管理系统源码+系统+mysql+lw文档+部署软件
  7. 个税改革3个月减税约千亿 7000多万人工薪不再缴税
  8. 第十章:小程序表单与医疗急救卡(下)
  9. dwz自定义插件的使用
  10. error updating changes:Cannot identify version of git executable git.exe