文档章节

JWT简介

MoonSugar
 MoonSugar
发布于 2016/07/14 09:39
字数 798
阅读 121
收藏 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 Storage Cookie
利用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
海淀
程序员
私信 提问
加载中

评论(0)

php 后端实现JWT认证方法

JWT简介 JWT(json web token)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。 JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务...

挺住我先走
05/22
0
0
基于JWT的Token登录认证(一)

1、JWT简介 JSON Web Token(缩写 JWT),是目前最流行的跨域认证解决方案。 session登录认证方案:用户从客户端传递用户名、密码等信息,服务端认证后将信息存储在session中,将session_id放...

osc_c10h48oh
2019/07/30
15
0
JWT(Json WEB Token)

JWT 简介 JWT(Json WEB Token)是一种采用 Json 方式安装传输信息的方式。 JWT 有针对各种开发语言的库。 python 中使用的是 PyJWT,它是 Python 对 JWT 的实现。 包 https://pypi.python....

osc_r74j15vd
2019/03/24
12
0
SpringBoot2.0 整合 JWT 框架,解决Token跨域验证问题

本文源码:GitHub·点这里 || GitEE·点这里 一、传统Session认证 1、认证过程 2、存在问题 二、JWT简介 JWT(全称:JSON Web Token),在基于HTTP通信过程中,进行身份认证。 1、认证流程 2、...

知了一笑
2019/09/02
0
0
Spring Boot使用JWT实现系统登录验证

简介 什么是JWT(Json Web Token) jwt是为了在网络应用环境间传递声明而执行的一种基于json的开放标准。该token被设计紧凑且安全的,特别适用于SSO场景。 jwt的声明一般被用来在身份提供者和服...

osc_a99nkwq0
2018/08/20
5
0

没有更多内容

加载失败,请刷新页面

加载更多

URL 中文链接 编码错误 完美解决

直接上代码 str = "%25E4%25B8%25AD%25E6%2596%2587";console.log(str);str =decodeURIComponent(decodeURIComponent(str));console.log(str); 输出结果 %25E4%25B8%25AD%25E6%2596%25......

放只虎归个山
59分钟前
17
0
.NET中小数,浮点数和双精度之间的区别? - Difference between decimal, float and double in .NET?

问题: What is the difference between decimal , float and double in .NET? .NET中的decimal , float和double float什么区别? When would someone use one of these? 有人什么时候会使用......

fyin1314
今天
22
0
如何找出Windows上正在侦听端口的进程? - How can you find out which process is listening on a port on Windows?

问题: 如何找出Windows上正在侦听端口的进程? 解决方案: 参考一: https://stackoom.com/question/CXO/如何找出Windows上正在侦听端口的进程 参考二: https://oldbug.net/q/CXO/How-can...

技术盛宴
今天
10
0
OSChina 周三乱弹 —— 一家动物都快饿成标本了~

@黑觉非常君 :前天晚上9点开始睡觉,睡到昨天上午8点起床,昨天下午2点又睡,睡到下午7点多,晚上10点又困了,又睡,睡到今天上午8点,中途没醒过,怎么这么能睡,是不是快挂了。 能睡不是好...

小小编辑
今天
24
0
神剧推荐全剧最污片段精剪

神剧推荐,全剧最污片段精剪 豆瓣评分最高,脑洞最大,脑回路最曲折,恶搞无数经典,没有一条差评的神剧 整个系列完整版 到这里观看

a57571735
今天
22
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部