JSON Web Token (JWT)是一个开放标准(RFC 7519)。

用于JSON对象在各个层之间安全地传输信息。该信息可以被验证和信任,通过数字签名。

应用场景:
    Authorization (授权) : 这是使用JWT的最常见场景。一旦用户登录,后续每个请求都将包含JWT,允许用户访问该令牌允许的路由、服务和资源。单点登录是现在广泛使用的JWT的一个特性,因为它的开销很小,并且可以轻松地跨域使用。
   
Information Exchange (信息交换) : 对于安全的在各方之间传输信息而言,JSON Web
Tokens无疑是一种很好的方式。因为JWTs可以被签名,例如,用公钥/私钥对,你可以确定发送人就是它们所说的那个人。另外,由于签名是使用头和有效负载计算的,您还可以验证内容没有被篡改。

JSON Web Token由三部分组成,它们之间用圆点(.)连接。这三部分分别是:

    Header
Payload
Signatur
e 典型的JWT样子:xxxxx.yyyyy.zzzzz
Header:

header典型的由两部分组成:
  1-token的类型(“JWT”)和
  2-算法名称(比如:HMAC SHA256或者RSA等等)
如:
{
"typ":"JWT",
"alg":"HS256"
}
最后用Base64对这个JSON编码就得到JWT的第一部分xxxxx.yyyyy.zzzzz
payload 
声明有三种类型: registered, public 和 private。
  • Registered claims : 这里有一组预定义的声明,它们不是强制的,但是推荐。比如:iss (issuer), exp (expiration time), sub (subject), aud (audience)等。
  • Public claims : 可以随意定义。
  • Private claims : 用于在同意使用它们的各方之间共享信息,并且不是注册的或公开的声明。
例如:
{
“iss”: “发行者”,
“sub”: 主题”,
“aud”: “观众”,
“exp”:”过期时间”,
“iat”:”签发时间”
以下可以添加自定义数据
“id”:”1”,
“nickname”:”昵称”
} 根据JWT claim set[用base64]加密得到的。claim set是一个json数据,是表明用户身份的数据,可自行指定字段很灵活,也有固定字段表示特定含义(但不一定要包含特定字段,只是推荐)。
Base64算法是可逆的,不可以在载荷部分保存用户密码等敏感信息。如果业务需要,也可以采用对称密钥加密。

对payload进行Base64编码就得到JWT的第二部分xxxxx.yyyyy.zzzzz

签名部分signature
HMACSHA256(Base64(Header) + “.” + Base64(Payload), secret),secret是加密的key。
签名的目的是用来验证头部和载荷是否被非法篡改。
验签过程描述:获取token值,读取Header部分并Base64解码,得到签名算法。根据以上方法算出签名,如果签名信息不一致,说明是非法的。

工作原理:

JSON Web Token工作原理

    初次登录:用户初次登录,输入用户名密码

    密码验证:服务器从数据库取出用户名和密码进行验证

    生成JWT:服务器端验证通过,根据从数据库返回的信息,以及预设规则,生成JWT

    返还JWT:服务器的将token放在cookie中将JWT返还

    带JWT的请求:以后客户端发起请求,带上cookie中的token信息。

json中用到的token的更多相关文章

  1. JSON.parse解决Unexpected token ' in JSON at position 1报错

     壹 ❀ 引 我们知道JSON.parse能将JSON字符串转变成JS对象,但在一些转换中可能出现Unexpected token ' in JSON at position 1的错误,这是因为被转换 ...

  2. jmeter压测学习3-提取json数据里面的token参数关联

    前言 现在很多接口的登录是返回一个json数据,token值在返回的json里面,在jmeter里面也可以直接提取json里面的值. 上一个接口返回的token作为下个接口的入参. 案例场景 我现在有 ...

  3. js解析json报错Unexpected token i in JSON at position 1

    因为后台json是手动拼接的,在拼接时偷了懒,不想转义,所以就用了单引号,结果js解析时悲催了 这里记录一下,被解析的json字符串必须键值对都用双引号包起来,必须是双引号 默默罚抄一百遍

  4. js解析json时报:Unexpected token s in JSON at position 0

    原因肯定是返回的json格式有问题 最有可能是后台在程序执行过程中,输出了某些调试信息等等,这些输出的字符串和json拼接成了新的字符串来解析,这时就会报错: 比如我在入口文件里var_dump了__ ...

  5. JSON::ParserError - 416: unexpected token at

    rm -rf ~/.cocoapods/repos/Spec_Lockandrm -rf ~/.cocoapods/repos/trunk/

  6. 【转】JSON.parse() Unexpected token i in JSON at position 2 报错问题

    JSON.parse(): Unexpected token i in JSON at position 2 报错问题 错误代码: var res = "[{id:1,name:'limin ...

  7. Laravel 5 中使用 JWT(Json Web Token) 实现基于API的用户认证

    在JavaScript前端技术大行其道的今天,我们通常只需在后台构建API提供给前端调用,并且后端仅仅设计为给前端移动App调用.用户认证是Web应用的重要组成部分,基于API的用户认证有两个最佳解决 ...

  8. JMeter_使用正则和JSON提取器参数化(常用于提取token)

    一.使用正则表达式提取器提取token 查看登录响应参数找出token.图中token为 "ticketString": "ccf26b17-a96f-4913-8925 ...

  9. android json解析及简单例子

    JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据 ...

  10. jsonObject jsonArray jsonTokener jsonStringer,json解析以及http请求获取josn数据并加以解析

    JSON的定义: 一 种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的 支持),从而可以在不同平台间进行 ...

随机推荐

  1. biancheng-JSTL标签库

    JSP 标签是一组与 HTML 标签相似,但又比 HTML 标签强大的功能标签.JSTL 用来简化 JSP 开发,可以使我们不用嵌入 Java 代码就能够开发出复杂的 JSP 页面.JSTL 包含 5 ...

  2. python包学习:-了解

    本节先做一些了解. numpy 参考:NumPy使用 NumPy 教程 NumPy是Python中科学计算的基础包.它是一个Python库,提供多维数组对象,各种派生对象(如掩码数组和矩阵),以及用于 ...

  3. VulNyx - Internal

    扫描发现有三个端口 basic验证需要用户名密码登录 访问80端口 \URLFinder 发现有个internal的php文件 看看有无任意文件读取漏洞 发现没有回显 但是总感觉怪怪的 应该是有啥东西 ...

  4. 在没有网关的IP地址上编写路由,实现另一个网段可以访问到该主机

    应用场景:该主机两个网卡分别对应两个IP地址 192.168.1.2网段为医保网,并且主机使用了改网段的的网关.192.168.100.99网段地址为互联网地址,没有使用该网段的网关. 我们开发小组通 ...

  5. JS深度理解

    事件循环 程序运行需要有自己专属的内存空间,可以把这块内存简单理解为进程 每个应用至少有一个进程,进程间相互独立,要通信,也需要双方同意 线程 有进程后,就可以运行程序的代码 运行代码的 [人] 称为 ...

  6. 创新+1+1+1+1!筑牢算力底座,助推AI产业繁荣发展!

    近日,ICT中国·2024高层论坛-云原生发展论坛在北京国家会议中心举办.天翼云出席<城市算力互联网实践指南>编制工作启动仪式.AI Cloud人工智能云服务标准体系阶段性成果发布仪式.算 ...

  7. 最长不降子序列 n log n 方案输出与 Dilworth 定理 - 动态规划模板

    朴素算法 不必多说,\(O(n^2)\) 的暴力 dp 转移. 优化算法 时间为 \(O(n \log n)\) ,本质是贪心,不是 dp . 思路是维护一个单调栈(手写版),使这个栈单调不降. 当该 ...

  8. 【ABP】项目示例(1)——项目搭建前置准备

    项目介绍 本项目使用.NET8+ABP+MySql搭建,基于DDD的设计思想,创建分层Web应用程序. 相关文档 .NET开发文档 Entity Framework Core开发文档 ABP开发文档 ...

  9. 本地部署DeepSeek后,没有好看的交互界面怎么行!

    大家好,我是晓凡. 写在前面 在前面的文章中手摸手的带小伙伴们在本地部署了DeepSeek.但是,部署完之后,我们要与之交互,只能在命令行中进行. 忘记怎么部署的小伙伴,来这儿复习一下~ 命令行交互如 ...

  10. C# 手机号码隐藏中间四位

    C# 隐藏手机号码中间四位数字 使用正则表达式隐藏手机号中间四位 if (!string.IsNullOrWhiteSpace(txtPhone.Text) && txtPhone.T ...