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. 巧用VTable打造炫酷金字塔图表

    在数据分析和可视化领域,表格是展示数据直观.有效的方式之一.今天,就让我们来探索如何利用VTable这个强大的表格组件,制作出既美观又富有信息量的金字塔图表,以及深入了解VTable中各种单元格类型的 ...

  2. 前端(四)-jQuery

    1.jQuery的基本用法 1.1 jQuery引入 <script src="js/jquery-3.4.1.min.js" type="text/javascr ...

  3. Sharding-JDBC分库分表

    https://blog.csdn.net/bochuangli/article/details/123029392 https://blog.csdn.net/bochuangli/article/ ...

  4. Jdk8新特性目录总结

    --------------------------------------- Lambda表达式 接口新增方法 四大函数式接口 方法引用 Stream(1) Stream(2) Stream(3) ...

  5. Spring Cloud认知学习(三):网关Zuul、config使用

    目录 zuul 作用: 简单示例: 0.创建模块 1.导入依赖: 2.主程序增加注解: 3.配置application.yml: 4.测试 配置语法: 路由 补充: 上一篇介绍一个新的组件Hystri ...

  6. DeepSeek太火,但老板们别慌,这里有份AI项目开展手册

    关注公众号回复1 获取一线.总监.高管<管理秘籍> 这两天有老板陆续在咨询:到底应该如何基于DeepSeek开展AI项目? 抛开一些偏细节.偏敏感的付费内容,其实有一套方法论倒是可以分享. ...

  7. idea遇见Command line is too long. Shorten command line for Main or also for Application default configuration?

    <property name="dynamic.classpath" value="true" /> 第一步:找到项目目录下的.idea\works ...

  8. Prometheus修改默认数据存储时间

    Prometheus修改默认数据存储时间 Prometheus 的数据存储时间是通过命令行参数 --storage.tsdb.retention.time 来设置的.这个参数指定了 Prometheu ...

  9. kvm virtio window server2003

    https://www.linux-kvm.org/page/Downloads 这是kvm官网对virtio讲解 http://www.linux-kvm.org/images/d/dd/KvmFo ...

  10. 类的public, private, protected有什么区别?

    如何区别C# private和protected? 一.通过使用来区分 1.private:编程语句在模块级别中使用,用于声明私有变量及分配存储空间. 2.protected:编程语句在模块级别中使用 ...