文档章节

JWT简介

MoonSugar
 MoonSugar
发布于 2016/07/14 09:39
字数 798
阅读 85
收藏 1
点赞 0
评论 0

#什么是JWT

JWT的全称是JSON Web Token, 它是一个开放的标准,定义了了一个紧凑和自包含(self-contained)的方法在端与端之间安全的传输JSON信息。传输的JSON信息因为经过了数字签名,因而可以被验证与信息。

**紧凑性: JWT的长度很小,因此可以通过URL、POST参数,HTTP消息头进行传输。 ** 自包含性: JWT的payload中包含了关于用户所需的信息, 避免了数据库查询。

#JWT的通途 授权信息交换

#JWT的结构 JWT有三个部分组成,并由点号(.)连接在一起。

  • Header
  • Payload
  • Signature 形如:

xxxxx.yyyyy.zzzzz

Header

Header本身是一个JSON字符串,它有两个值组成,第一个叫‘typ’,它标识token的类型,默认为“JWT”;第二个叫‘alg’,它标识JWT使用的哈希算法,例如,HMAC, SHA256, RSA等。

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

然后用Base64Url对JSON进行编码。

##Payload Payload部分包含了所有的声明(claim),声明是对某个实体或者或者附加的元数据的描述语句,

保留声明

JWT规范中包含了7个保留声明:

  • iss(issuer): token的签发方,通常为认证服务器,它的值可以是普通的字符串或者是URI。
  • sub(subject): 被认证方的信息,通常为登录用户的相关信息。
  • aud(audience): 用来表示JWT的接受方,它可以是一个字符串数组。
  • exp(expiration time): 时间戳,并且当前时间必须在exp时间之前,当当前时间超过exp时间之后,服务器不再接受该JWT。
  • nbf(Not Before): 时间戳,表示在该时间点之前,服务器不接受该Token。
  • iat(Issued At): 时间戳,Token的签发时间。
  • jti(JWT ID): 大小写敏感的字符串,用于唯一标识当前token。 其中,iss、sub和aud的值都是大小写敏感的。

公共声明

私有声明

Payload需要用Base64Url进行编码。

##Signature 签名是由以上两个部分由点号连接起来之后,有加密算法生成签名字符串。

最终将这三部分组合在一起,生成最终的JWT。

#JWT存储方式 JWT可以保存在HTML5 Web Storage中也可以保存在Cookie中,一下对比这两种方式的不同。

Web StorageCookie
利用JS代码,从响应中取出JWT,存入 Web Stroage中通过set-cookie 自动存入 cookie中
可自定义每次请求是否要添加JWT到报文头中每次请求都会携带JWT
由于同一个domain下的js脚本都可以读取 Web Stroage,所以容易受到Cross-site scripting (xss) 攻击。通过添加HttpOnly可以阻止js脚本从Cookie中读取JWT,防止xss攻击。但是该方法容易收到CSRF攻击,解决方法包括 检查 Head中的Referer/Origin字段,和添加检验token等

© 著作权归作者所有

共有 人打赏支持
MoonSugar
粉丝 0
博文 12
码字总数 20196
作品 0
海淀
程序员
SpringBoot--JWT集成配置

一, JWT简介 JWT 全名 JSON WEB Token 主要作用为用户身份验证, 广泛应用与前后端分离项目当中. JWT 的优缺点 : https://www.jianshu.com/p/af8360b83a9f 二, JWT 在 spring boot 项目当中的...

ge洋 ⋅ 05/19 ⋅ 0

tomsun28/bootshiro

bootshiro 自己在前后端分离上的实践 要想实现完整的前后端分离,安全这块是绕不开的,这个系统主要功能就是动态restful api管理,这次实践包含两个模块,基于搭建的权限管理系统后台bootshi...

tomsun28 ⋅ 04/25 ⋅ 0

八幅漫画理解使用 JWT设计的单点登录系统

上次在《JSON Web Token - 在Web应用间安全地传递信息》中我提到了JSON Web Token可以用来设计单点登录系统。我尝试用八幅漫画先让大家理解如何设计正常的用户认证系统,然后再延伸到单点登录...

John Wu ⋅ 04/18 ⋅ 0

Json Web Token介绍与基本使用

一、Session与JWT 1.1 传统Cookie+Session +的存在主要是为了解决HTTP这一下服务器如何识别用户的问题。 其原理就是在用户登录通过验证后,服务端将数据加密后保存到客户端浏览器的Cookie中,...

yuanlaijike ⋅ 05/03 ⋅ 0

SpringBoot 整合 oauth2(五)实现 jwt 及 扩展

什么是jwt,即 json web token。JWT是一种用于双方之间传递安全信息的简洁的、URL安全的表述性声明规范。也是一种token,但是和token有一些不同。 jwt优点: 自包含 防篡改 可自定义扩展 JW...

FantJ ⋅ 05/22 ⋅ 0

Len/Len Framwork

Len Framwork 简介: 这是个php框架, 但是这个框架还很弱小. Len 框架就像它的名字一样, 非常精简. 目标: 简单! 易用! 不给别人使用! 说明: 集成Composer组件; 集成Redis, Mongodb, Mysql, Ya...

Len ⋅ 04/13 ⋅ 0

如何给express-jwt的unless方法加上http-method(get,post...)限制条件

根据express-jwt官方说明文档,我们可以在总路由上加上jwt验证,同时在那些不想加验证的路由上使用去除验证,如下: 这样就不用每条路由挨个去加jwt验证了,方便了不少。但是在使用过程中发现...

Angeladaddy ⋅ 04/09 ⋅ 0

年薪20万Python工程师进阶(1):Django-第三方登录框架

1.安装 pip install social-auth-app-django 2.配置 INSTALLED_APPS=( ... 'social_django', ... ) 3.数据生成,直接migrate,因为源码中的 makemigrtasion 生成的数据库迁移文件已经存在了。...

程序员八阿哥 ⋅ 05/11 ⋅ 0

OAuth 及 移动端鉴权调研

OAuth OAuth是一个解决用户无需向第三方应用提供用户名密码,让第三方应用访问用户私密资源的授权方案。 举例: 用户a,在网站B存有私密信息(年龄、邮箱、头像),而a在访问第三方网站C时,为...

马肱 ⋅ 05/15 ⋅ 0

Java Token的原理和生成使用机制

在此之前我们先了解一下什么是Cookie、Session、Token 1、什么是Cookie? cookie指的就是浏览器里面能永久存储数据的一种数据存储功能。cookie由服务器生成,发送给浏览器,浏览器把cookie以...

心月狐 ⋅ 05/18 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

vim编辑模式、vim命令模式、vim实践

vim编辑模式 编辑模式用来输入或修改文本内容,编辑模式除了Esc外其他键几乎都是输入 如何进入编辑模式 一般模式输入以下按键,均可进入编辑模式,左下角提示 insert(中文为插入) 字样 i ...

蛋黄Yolks ⋅ 20分钟前 ⋅ 0

大数据入门基础:SSH介绍

什么是ssh 简单说,SSH是一种网络协议,用于计算机之间的加密登录。 如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码...

董黎明 ⋅ 39分钟前 ⋅ 0

web3j教程

web3j是一个轻量级、高度模块化、响应式、类型安全的Java和Android类库提供丰富API,用于处理以太坊智能合约及与以太坊网络上的客户端(节点)进行集成。 汇智网最新发布的web3j教程,详细讲解...

汇智网教程 ⋅ 46分钟前 ⋅ 0

谷歌:安全问题机制并不如你想象中安全

腾讯科技讯 5月25日,如今的你或许已经对许多网站所使用的“安全问题机制”习以为常了,但你真的认为包括“你第一个宠物的名字是什么?”这些问题能够保障你的帐户安全吗? 根据谷歌(微博)安...

问题终结者 ⋅ 46分钟前 ⋅ 0

聊聊spring cloud gateway的RedisRateLimiter

序 本文主要研究下spring cloud gateway的RedisRateLimiter GatewayRedisAutoConfiguration spring-cloud-gateway-core-2.0.0.RELEASE-sources.jar!/org/springframework/cloud/gateway/con......

go4it ⋅ 今天 ⋅ 0

169. Majority Element - LeetCode

Question 169. Majority Element Solution 思路:构造一个map存储每个数字出现的次数,然后遍历map返回出现次数大于数组一半的数字. 还有一种思路是:对这个数组排序,次数超过n/2的元素必然在中...

yysue ⋅ 今天 ⋅ 0

NFS

14.1 NFS介绍 NFS是Network File System的缩写 NFS最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netapp公司参与并主导开发,最新为4.1版本 NFS数据传输基于RPC协议,RPC...

派派菠菜 ⋅ 今天 ⋅ 0

18.进入编辑模式 vim命令模式 实践

5.5 进入编辑模式 5.6 vim命令模式 5.7 vim实践 5.5 进入编辑模式: i 在当前字符前插入 I 在光标所在行的行首插入 a 在当前字符后插入 A 在光标所在行的行尾插入 o 在当前所在行的下一行插入...

王鑫linux ⋅ 今天 ⋅ 0

阻塞队列(2)--LinkedBlockingDeque底层实现

2.1 LinkedBlockingQueue是什么? 1.1 LinkedBlockingQueue是一个阻塞式的队列,继承自AbstractBlockingQueue,间接的实现了Queue接口和Collection接口。底层以链表的形式保存数据(双向链表,...

yokol ⋅ 今天 ⋅ 0

NFS介绍 NFS服务端安装配置 NFS配置选项

14.1 NFS介绍 14.2 NFS服务端安装配置 14.3 NFS配置选项 NFS介绍 NFS是Network File System的缩写;这个文件系统是基于网路层面,通过网络层面实现数据同步 NFS最早由Sun公司开发,分2,3,4三...

lyy549745 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部