什么是JWT令牌认证?
当下,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令牌认证?的更多相关文章
- emqx启用JWT令牌认证(包含hmac-based和public-key)
emqx连接启用jwt令牌认证 jwt令牌 概述 JWT 即 JSON Web Tokens 是一种开放的,用于在两方之间安全地表示声明的行业标准的方法(RFC 7519). 组成 令牌的形式 xxx ...
- 开源干货!!!.NET Core + JWT令牌认证 + Vue.js(iview-admin) 通用动态权限(RBAC)管理系统框架[DncZeus]开源啦!!!
DncZeus 前言 关于 DncZeus DncZeus = Dnc + Zeus "Dnc"--.Net Core 的缩写: "Zeus"--中文译为宙斯, ...
- OAuth2.0实战!使用JWT令牌认证!
大家好,我是不才陈某~ 这是<Spring Security 进阶>的第3篇文章,往期文章如下: 实战!Spring Boot Security+JWT前后端分离架构登录认证! 妹子始终没 ...
- Spring Security OAuth2.0认证授权三:使用JWT令牌
Spring Security OAuth2.0系列文章: Spring Security OAuth2.0认证授权一:框架搭建和认证测试 Spring Security OAuth2.0认证授权二: ...
- 微服务架构 | 7.2 构建使用 JWT 令牌存储的 OAuth2 安全认证
目录 前言 1. JWT 令牌存储基础知识 1.1 JSON Web Token 2. 构建使用 JWT 令牌存储的 OAuth2 服务器 2.1 引入 pom.xml 依赖文件 2.2 创建 JWT ...
- ASP.NET Core 基于JWT的认证(一)
ASP.NET Core 基于JWT的认证(一) Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计 ...
- Spring Boot Security OAuth2 实现支持JWT令牌的授权服务器
概要 之前的两篇文章,讲述了Spring Security 结合 OAuth2 .JWT 的使用,这一节要求对 OAuth2.JWT 有了解,若不清楚,先移步到下面两篇提前了解下. Spring Bo ...
- ASP.NET Core系列:JWT身份认证
1. JWT概述 JSON Web Token(JWT)是目前流行的跨域身份验证解决方案. JWT的官网地址:https://jwt.io JWT的实现方式是将用户信息存储在客户端,服务端不进行保存. ...
- 阶段5 3.微服务项目【学成在线】_day18 用户授权_03-方法授权-jwt令牌包含权限
修改认证服务的UserDetailServiceImpl类,下边的代码中 permissionList列表中存放了用户的权限, 并且将权限标识按照中间使用逗号分隔的语法组成一个字符串,最终提供给Spr ...
随机推荐
- Ioc依赖注入:Unity4.0.1 在项目中的应用 (MVC和API)
使用Unity的好处网上有很多,百度一下即可 这里引用了一篇关于面向接口编程的好处的文章作为引申:https://blog.csdn.net/Cyy19970527/article/details/8 ...
- Linux下用Bash语言实现简单排序的功能
题目链接: 题目描述 利用指针,编写一个函数实现三个整数按由小到大的排序. 输入 三个整数 输出 由小到大输出成一行,每个数字后面跟一个空格 样例输入 2 3 1 样例输出 1 2 3 复习下Linu ...
- 【python&pycharm的安装使用】
一.Python3.7安装 1. 运行python3.7.exe 2. 检查是否安装成功:命令窗口输入python -V 二.Pycharm安装 1. 运行pycharm.exe(社区版) 2. 配置 ...
- BK: How to read a book 第四篇
第四篇 阅读的最终目标 第二十章 阅读的第四个层次:主题阅读 在做主题阅读时的要求: 1. 知道:知道应该读哪些书. 在面对如此庞大的相关资料时,我们要如何决定我们要研究的主题是什么呢. 如何判断属于 ...
- 解决SourceTree每次拉取提交都需要输入密码的问题
打开终端并且输入: git config --global credential.helper osxkeychain 第一次需要输入密码,以后都不需要了
- 从零DIY机械键盘/主控方案
自从有了第一套机械键盘,先后修改了接口方案,安装了LED灯等,但是始终无法满足自己的DIY欲望. 于是想到最简单的方法就是用现成的主控,而主控来源于废弃的键盘,如下图: 这种主控也是矩阵方式,只需要测 ...
- VS Code的一些常用插件
1.Bracket Pair Colorizer(括号对彩色化)功能:vscode中括号提醒比较简答,对于层级比较多的比较难看出他的结构,它为代码中的各种结对的括号提供了颜色高亮等功能,将括号对用线连 ...
- xshell连接本地虚拟机中的centos
1. 一开始Xshell连接不上(设置为DHCP 动态IP)虚拟机上的centos8 参考这篇博文,将centos上的DHCP改为static 静态IP xshell连接本地虚拟机中的centos 2 ...
- Linux oracle中文乱码的问题解决
乱码问题的根源是字符集的修改 1.查看linux的默认语言 2.查看客户端的语言编码设置 配置文件中的配置: cat ~/.bash_profile 注意修改配置信息: export PATHexp ...
- HTTP状态码的浪漫故事
小明是一个程序员,经常加班,在一个和尚部门,一个妹子都没有,所以一直单身. 404(Not Found):服务器无法根据客户端的请求找到资源(网页) 过年回家,老爸老妈给门开一条缝,先看看小明身后-- ...