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. 用 C# 实现检测系统环境变量 “Path” 中是否有某个值,没有就添加的方法

    用 C# 实现检测系统环境变量 "Path" 中是否有某个值,没有就添加的方法: using System; using System.Collections.Generic; u ...

  2. LOL(英雄联盟) API 接口

    /*LOL(英雄联盟) API 接口 By wgscd /*LOL(英雄联盟) API 接口 By wgscd QQ:1009374598 */ GET https://127.0.0.1:58182 ...

  3. WPFMediaKit --WPF项目中 调用摄像头拍照

    <Window x:Class="WpfApp1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/200 ...

  4. biancheng-Mybatis框架

    目录http://c.biancheng.net/mybatis/ 1MyBatis是什么2MyBatis和Hibernate的区别3MyBatis下载4第一个MyBatis程序5MyBatis核心对 ...

  5. (原创)[开源][.Net Standard 2.0] SimpleMMF (进程间通信框架)更新 v1.1,极低CPU占用

    一.前言 在上一篇 (原创)[.Net] 进程间通信框架(基于共享内存)--SimpleMMF 中,发布了v1.0版,最大的问题是:CPU占用较高,至少40-50%. 这既与我的开发水平有关,也与Si ...

  6. langchain-知识库问答

    本地接入 百川 langchain调用 参考:https://github.com/datawhalechina/self-llm/blob/master/BaiChuan/03-Baichuan2- ...

  7. python 控制流程

    条件语句 if语法 if True: print("hello") print("world!") 输出: helloworld! 举例: "&quo ...

  8. Q:oracle解锁用户

    怎么查看oracle用户是否被锁 1.一般oracle数据库默认是10次尝试失败后锁住用户 1.查看FAILED_LOGIN_ATTEMPTS的值 select * from dba_profiles ...

  9. mongo数据库CPU使用率飙高及优化

    出现的情况 某天高高兴兴上班,发现一台mongo数据库负载较高,达到了300多,且一直很稳定,难道是硬件过时了. 检查主机的资源使用发现一个mongod进程使用了几乎所有的CPU资源. top - 1 ...

  10. git命令参考

    git命令参考 前言 在版本管理中,我们常用到git或者svn去管理我们的代码. 因为嵌入式开发经常要用到Linux环境做开发,所以懂得一定的git命令对我们进行开发过程中的版本管理非常重要 创建仓库 ...