文档章节

JWT简介

MoonSugar
 MoonSugar
发布于 2016/07/14 09:39
字数 798
阅读 88
收藏 1

#什么是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
0
深入了解Json Web Token之概念篇

  以下,可能你能够在各大网站上搜到,但是对于JWE 的内容,却鲜有见闻。下文是我读了json web token handle book后,用自己的理解写下的,如有疑问,欢迎评论。主要参考文本JWT Hand Book...

FreeBuf
08/17
0
0
用JWT技术解决IM系统Socket长连接的身份认证痛点

1、引言 随着瓜子二手车相关业务的发展,公司有多个业务线都接入了IM系统,IM系统中的Socket长连接的安全问题变得越来越重要。本次分享正是基于此次解决Socket长连接身份安全认证的实践总结而...

首席大胸器
11/28
75
0
理解 JSON Web Tokens (JWT) 的 5 个简单步骤

原文链接:medium.com/vandium-sof… 在本文中,将解释JSON Web Tokens(JWT)的基本原理以及使用原因。 JWT 是确保应用程序信任和安全的重要部分。 JWT 允许以安全的方式表示诸如用户数据之...

腾讯IVWEB团队
10/08
0
0
[笔记] JWT Java Json Web Token (一)

jwt实现 JWT简单介绍 Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。J...

z201
2017/10/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java框架学习日志-7(静态代理和JDK代理)

静态代理 我们平时去餐厅吃饭,不是直接告诉厨师做什么菜的,而是先告诉服务员点什么菜,然后由服务员传到给厨师,相当于服务员是厨师的代理,我们通过代理让厨师炒菜,这就是代理模式。代理...

白话
今天
22
0
Flink Window

1.Flink窗口 Window Assigner分配器。 窗口可以是时间驱动的(Time Window,例如:每30秒钟),也可以是数据驱动的(Count Window,例如:每一百个元素)。 一种经典的窗口分类可以分成: 翻...

满小茂
今天
17
0
my.ini

1

architect刘源源
今天
15
0
docker dns

There is a opensource application that solves this issue, it's called DNS Proxy Server It's a DNS server that solves containers hostnames, if could not found a hostname that mat......

kut
今天
15
0
寻找数学的广度——《这才是数学》读书笔记2700字

寻找数学的广度——《这才是数学》读书笔记2700字: 文|程哲。数学学习方式之广:国内外数学教育方面的专家,进行了很多种不同的数学学习方式尝试,如数学绘本、数学游戏、数学实验、数学步道...

原创小博客
今天
27
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部