简介JWT

news2024/11/19 3:37:52
简介 JWT
http 协议无状态的,所以需要 sessionId token 的鉴权机制, jwt token 认证机制不需要在服务端再保留用户的认证信息或会话信息。这就意味着基于jwt 认证机制的应用程序不需要去考虑用户在哪一台服务器登录了,这就为应用的扩展提供了便利,jwt 更适用于分布式应用
1 、前端通过 Web 表单将自己的用户名和密码发送到后端的接口,这个过程一般是一个 POST 请求。建议的方式是通过SSL 加密的传输 (HTTPS) ,从而避免敏感信息被嗅探
2 、后端核对用户名和密码成功后,将包含用户信息的数据作为 JWT Payload ,将其与 JWT Header 分别进行Base64 编码拼接后签名,形成一个 JWT Token ,形成的 JWT Token 就是一个如同 lll.zzz.xxx 的字符串
3 、后端将 JWT Token 字符串作为登录成功的结果返回给前端。前端可以将返回的结果保存在浏览器中,退出登录时删除保存的JWT Token 即可
4 、前端在每次请求时将 JWT Token 放入 HTTP 请求头中的 Authorization 属性中 ( 解决 XSS XSRF 问题 )
5 、后端检查前端传过来的 JWT Token ,验证其有效性,比如检查签名是否正确、是否过期、 token 的接收方是否是自己等
6 、验证通过后,后端解析出 JWT Token 中包含的用户信息,进行其他逻辑操作 ( 一般是根据用户信息得到权限等) ,返回结果
JWT 的优势
1 、简洁: JWT Token 数据量小,传输速度也很快
2 、因为 JWT Token 是以 JSON 加密形式保存在客户端的,所以 JWT 是跨语言的,原则上任何 web 形式都支持
3 、不需要在服务端保存会话信息,也就是说不依赖于 cookie session ,所以没有了传统 session 认证的弊端,特别适用于分布式微服务
4 、单点登录友好:使用 Session 进行身份认证的话,由于 cookie 无法跨域,难以实现单点登录。但是,使用token 进行认证的话, token 可以被保存在客户端的任意位置的内存中,不一定是 cookie ,所以不依赖cookie ,不会存在这些问题
5 、适合移动端应用:使用 Session 进行身份认证的话,需要保存一份信息在服务器端,而且这种方式会依赖到Cookie (需要 Cookie 保存 SessionId ),所以不适合移动端
jwt 的组成部分
标准的 jwt 令牌分为三部分,分别是 Header payload signature ;在 token 字符串中使用 . 进行分割
Header 的组成部分包括两点:参数类型 jwt ,签名的算法 hs256
Payload 的组成就是登陆用户的一些信息,和 token 发行和失效时间等;这些内容里面有一些是标
准字段,你也可以添加其它需要的内容
Signature 是先用 Base64 编码的 header payload ,再用加密算法加密一下,加密的时候要放进去
一个 Secret ,这个相当于是一个密码,这个密码秘密地存储在服务端 JWT 每部分的作用,在服务端接收到客户端发送过来的 JWT token 之后:
header payload 可以直接利用 base64 解码出原文,从 header 中获取哈希签名的算法,从
payload 中获取有效数据。
signature 由于使用了不可逆的加密算法,无法解码出原文,它的作用是校验 token 有没有被篡改。
服务端获取 header 中的加密算法之后,利用该算法加上 secretKey header payload 进行加密,
比对加密后的数据和客户端发送过来的是否一致。注意 secretKey 只能保存在服务端,而且对于不
同的加密算法其含义有所不同,一般对于 MD5 类型的摘要加密算法, secretKey 实际上代表的是盐
JWT 工作原理

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/194986.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python函数和 lambda表达式

Python提供了许多内置函数,比如:print(),len()等。它还支持用户自定义函数。 一、Python函数 1、函数定义使用 (1)函数定义 Python 允许我们将常用的代码以固定的格式封装(包装)成一个独立的…

一刷代码随想录——字符串

1 力扣344.反转字符串题目描述:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。class Solution { public:v…

数据库原理与应用-关系数据库

关系数据结构及形式化定义关系操作关系的完整性关系代数关系演算

WebSocket协议简介

一、WebSocket协议是什么 WebSocket是基于TCP的应用层协议,用于在C/S架构的应用中实现双向通信,它实现了浏览器与服务器全双工(full-duplex)通信,也就是允许服务器主动发送信息给客户端。 WebSocket 协议主要为了解决基于 HTTP/1.x 的 Web …

【正点原子Linux连载】第一章 VMware虚拟机安装 摘自【正点原子】ATK-DLRV1126系统开发手册

1)实验平台:正点原子RV1126 Linux开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id692176265749 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html 第一章 V…

flex布局常用属性记录

场景:前端常用的页面布局当使用 flex 布局时,首先想到的是两根轴线 — 主轴和交叉轴。主轴由flex-direction 定义,另一根轴垂直于它。我们使用 flexbox 的所有属性都跟这两根轴线有关;这里只做主轴的介绍:主轴主轴由 f…

算法刷题-四数之和、缺失的第一个正数、N 皇后

文章目录四数之和缺失的第一个正数N 皇后四数之和 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a b c d 的值与 target 相等?找出所有满足条件且不重复…

【基础篇】6 # 栈:如何实现浏览器的前进和后退功能?

说明 【数据结构与算法之美】专栏学习笔记 什么是栈? 栈是一种“操作受限”的线性表,只允许在一端插入和删除数据,其特性就是后进先出、先进后出。 栈既可以用数组来实现,也可以用链表来实现。 用数组实现的栈叫作顺序栈用链…

【正点原子Linux连载】第三章 RV1126开发环境搭建 摘自【正点原子】ATK-DLRV1126系统开发手册

1)实验平台:正点原子RV1126 Linux开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id692176265749 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html 第三章 R…

Gartner发布2022云Web应用程序和API保护魔力象限

8月30日,知名咨询机构Gartner发布2022云Web应用程序和API保护魔力象限。当前,云Web应用程序和API保护市场迅速增长。 Gartner预测,到 2024 年,70%实施多云战略的企业将青睐云 Web 应用程序和API保护平台 (WAAP&#x…

26岁从财务转行软件测试,4年沉淀我已经是25k的测开工程师...

此文绝对不是喂鸡汤,而是告诉你实实在在的转行办法。有点长,请细看有些人会轻松上岸。有些人会挣扎着上岸。有些人会淹死在水里。我属于挣扎着上岸的。我原来是做财务方面的,后面自学转行做了软测程序员,从事软件测试工作4年&…

SpringMVC之简介

看到SpringMVC这个名字我们会发现其中包含Spring,那么SpringMVC和Spring之间的会有关系么?答案是肯定有,SpringMVC隶属于Spring,是Spring技术中的一部分。那么SpringMVC到底是用来做什么的呢? 回想web阶段,我们学习过Servlet,而SpringMVC与…

Atlas中间件快速入门(实现数据库读写分离)

一、Atlas简介 1 2 3 41. Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目 2. 它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性 3. 目前该项目在360公司内部得到了广泛应…

屏幕录制没有声音怎么办?看看你有没有打开这个设置

电脑是我们学习和办公不可或缺的工具,有时我们需要使用工具对电脑屏幕进行录制。但很多小伙伴录制的电脑录屏文件只有画面没有声音。屏幕录制没有声音怎么办?不用慌!有可能你只是忘了在录制前打开这个设置。今天小编就来教大家录制前需要开启…

公司企业如何制作微信小程序店铺?

​微信小程序除了可以为公司企业充当展示官网之外,有些主打线上销售商品的公司企业也会借助小程序来卖货,那就是我们常说的微信小程序店铺。那么公司企业如何制作微信小程序店铺?下面给大家做个讲解。 一、注册小程序账号 微信小程序店铺也属…

有效管理 Kubernetes 的流行解决方案,7 款 DevOps 工具管理 Kubernetes ,集群管理更加的轻松顺畅和高效

有效管理 Kubernetes 的流行解决方案,7 款 DevOps 工具管理 Kubernetes ,集群管理更加的轻松顺畅和高效。 在新兴的云原生环境中,Kubernetes无处不在。它已成为编排容器的标准。但是,管理多个 Kubernetes 集群(必须以…

前端整理 —— 前端安全

1. XSS(跨站脚本攻击) 什么是XSS 是一种代码注入攻击。攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可获取用户的敏感信息如Cookie、SessionID等,进而危害数据安全常见类型…

【并发编程十四】c++原子操作(2)——实现自旋锁

【并发编程十四】c原子操作(2)——实现自旋锁一、自旋锁简介二、使用自旋锁三、不使用自旋锁四、分析简介 在介绍完原子操作,我们这篇使用c提供的原子操作,实现一个自旋锁,并加以利用。 原子操作参见【并发编程十三】…

什么是shell?shell在Linux内怎么编写脚本?

目录 一、概念 二、简单创建脚本 三、shell语法 1.变量 2.环境变量 3.参数变量 4.条件 5.控制结构 if语句 elif语句 for语句 一、概念 什么是shell? shell是一个作为用户与Linux系统间接口的程序,它允许用户向操作系统输入需要执行的命令。 下图显示了sh…

kali之setoolkit使用

kali之setoolkit使用 1 搭建钓鱼网站 钓鱼网站是黑客常用的用于盗取目标用户名与账号的方式,今天主要介绍setoolkit来制作钓鱼网站 setoolkit是kali下的社会工程学工具集。 ①进入setoolkit 命令行输入: setoolkit②选择社会工程学攻击 - 网络攻击 - …