https://www.qikegu.com/easy-understanding/892

JWT

基于token的用户认证原理:让用户输入账号和密码,认证通过后获得一个token(令牌),在token有效期里用户可以带着token访问特定资源。

开始token并没有一个统一标准,大家都各自使用自己的方案。后来出现了JWT(Json Web Token)这个标准。

JWT本质上是一个对JSON对象加密后的字符串。当服务器认证用户通过后,一个包含用户信息的json对象被加密后返回给用户,json对象:

{
"UserName": "老王",
"Role": "admin",
"Expire": "2019-01-10 20:10:00"
}

之后,用户访问服务器时,都要返回这个json对象。服务器只靠这个对象就可以识别用户身份,不需要再去查数据库。为了防止用户篡改数据,服务器在生成对象时将添加一个签名。

服务器不保存任何会话数据,也就是说,服务器变得无状态,从而更容易扩展。

JWT的结构

典型的JWT由三个部分组成,每个部分由一个点(.)分隔。

  • Header
  • Payload
  • Signature
header.payload.signature

Header

头部包含所使用的签名算法和令牌的类型(即JWT),这部分会被编码为Base64URL格式。

{
"alg": "HS256",
"typ": "JWT"
}

Base64URL的格式:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

Base64URL

Base64编码后可能出现字符+和/,在URL中不能直接作为参数,Base64URL就是把字符+和/分别变成-和_。JWT有可能放在url中,所以要用Base64URL编码。

Payload

Playload包含实际要传输的信息,附带一些其他信息如过期时间、发行时间等。JWT指定了一些官方字段(claims)备用:

  • iss: 签发人
  • exp: 过期时间
  • iat: 签发时间
  • nbf: 生效时间
  • jti: 编号
  • sub: 主题
  • aud: 受众

除了官方字段,在这个部分还可以添加私有字段,例如:

{
"sub": "1234567890",
"name": "隔壁老王",
"iat": 1516239022
}

这部分也是Base64URL编码的:

eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IumalOWjgeiAgeeOiyIsImlhdCI6MTUxNjIzOTAyMn0

Signature

Signature部分是对前两部分的防篡改签名。将Header和Payload用Base64URL编码后,再用点(.)连接起来。然后使用签名算法和密钥对这个字符串进行签名:

signature = hmac_sha256(base64encode(header) + '.' + base64encode(payload), 'MY_SUPER_SECRET_KEY')

这个密钥(MY_SUPER_SECRET_KEY)只有服务器才知道,不能泄露给用户。

签名信息:

huj1R4oYsSxbIpecRwGcDBzqFkL9dXA88P2ouM5xhT8

组合在一起

3部分组合在一起,构成了完整的jwt:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IumalOWjgeiAgeeOiyIsImlhdCI6MTUxNjIzOTAyMn0.huj1R4oYsSxbIpecRwGcDBzqFkL9dXA88P2ouM5xhT8

JWT怎么用

浏览器接收到服务器发过来的jwt后,可以存储在Cookie或localStorage中。

之后,浏览器每次与服务器通信时都会带上JWT。可以将JWT放在Cookie中,会自动发送(不跨域),或将JWT放在HTTP请求头的授权字段中。

Authorization: Bearer <token>

也可放在url中,或POST请求的数据体中。

注意

  • JWT默认是不加密的,但也可以加密,不加密时不宜在jwt中存放敏感信息
  • 不要泄露签名密钥(MY_SUPER_SECRET_KEY)
  • jwt签发后无法撤回,有效期不宜太长
  • JWT泄露会被人冒用身份,为防止盗用,JWT应尽量使用https协议传输

5分钟搞懂:JWT(Json Web Token)的更多相关文章

  1. 如何在SpringBoot中集成JWT(JSON Web Token)鉴权

    这篇博客主要是简单介绍了一下什么是JWT,以及如何在Spring Boot项目中使用JWT(JSON Web Token). 1.关于JWT 1.1 什么是JWT 老生常谈的开头,我们要用这样一种工具 ...

  2. Java JWT: JSON Web Token

    Java JWT: JSON Web Token for Java and Android JJWT aims to be the easiest to use and understand libr ...

  3. JWT(JSON Web Token) 【转载】

    JWT(JSON Web Token) 什么叫JWTJSON Web Token(JWT)是目前最流行的跨域身份验证解决方案. 一般来说,互联网用户认证是这样子的. 1.用户向服务器发送用户名和密码. ...

  4. [更新]一份包含: 采用RSA JWT(Json Web Token, RSA加密)的OAUTH2.0,HTTP BASIC,本地数据库验证,Windows域验证,单点登录的Spring Security配置文件

    没有任何注释,表怪我(¬_¬) 更新: 2016.05.29: 将AuthorizationServer和ResourceServer分开配置 2016.05.29: Token获取采用Http Ba ...

  5. ( 转 ) 什么是 JWT -- JSON WEB TOKEN

    什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点 ...

  6. 关于JWT(Json Web Token)的思考及使用心得

    什么是JWT? JWT(Json Web Token)是一个开放的数据交换验证标准rfc7519(php 后端实现JWT认证方法一般用来做轻量级的API鉴权.由于许多API接口设计是遵循无状态的(比如 ...

  7. 什么是JWT(Json Web Token)

    什么是 JWT (Json Web Token) 用户认证是计算机安全领域一个永恒的热点话题. JWT 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519). 该to ...

  8. API安全验证之JWT(JSON WEB TOKEN) OLCMS

    假如www.olcms.com/getUserInfo获取用户信息,你怎么知道当前用户是谁?有人说登陆时候我把他UID写入session了,如果是API接口,没有session怎么办,那么就需要把UI ...

  9. JWT(Json Web Token)认证

    目录 JWT(Json Web Token) JWT的数据结构 JWT的用法 JWT验证流程

随机推荐

  1. 1_02_MSSQL课程_T_SQL语句入门

    1.->全名:结构化查询语言(Structured Query Language)    关系数据库管理系统的标准语言. ->SQL主要分为三种语言:DML\DDL\DCL DDL(数据定 ...

  2. mysql安装到最后一步无响应的问题超简单最有效解决

    mysql安装到最后一步无响应的问题超简单最有效解决 无论你是安装过还是没安装过,通过此方法都可以解决.之前我的机器和服务器就是都到最后一步卡住,上网搜索方法都无果.后自己尝试了很多次,亲测64位机和 ...

  3. Opencv中常见的滤波方法

    滤波(模糊)的概念和作用: 图像滤波增强处理实质上就是运用滤波技术来增强图像的某些空间频率特征,以改善地物目标与领域或背景之间的灰度反差. 遥感系统成像过程中可能产生的”模糊”作用,常使遥感图像上某些 ...

  4. docker幕布笔记

    幕布链接>>>>https://mubu.com/doc/l_KDT3S5w0

  5. redis集群JedisCluster连接关闭问题

    JedisCluster连接关闭问题 set方法为例 //伪代码 JedisCluster jedisCluster = new JedisCluster(); jedisCluster.set(&q ...

  6. 百度地图javascript API,每个功能每天免费的次数

  7. python-python基础6(面向对象)

    一.面向对象编程 编程范式 编程是 程序 员 用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程 , 一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马 ...

  8. python+ selenium + webdriver的环境准备

    web自动化安装 1.安装最新的selenium pip install -U selenium 2.安装chrom浏览器和chromdriver的下载 http://chromedriver.sto ...

  9. 超赞!苹果新一代iPad确定:外形大变样

    导读 除了iPhone.新MacBook Pro外,苹果还准备新款的入门版iPad,这么来看的话,他们要发布的新品真的是太多了. 据产业链最新消息称,苹果将在今年9月份更新入门版iPad,具体来说就是 ...

  10. ESX/ESXi 主机上的每个插槽中安装了多少内存

    要确定在 ESX/ESXi 主机上的每个插槽中安装了多少内存,请执行以下操作: 1. 启动ssh服务 2. 登陆esxi主机查看 使用 SSH 客户端登录主机,以 root 用户身份运行以下命令之一: ...