2019-08-14

                JWT 介绍 


JSON Web Token(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑和自包含的方式,用于在各方之间作为 JSON 对象安全地传输信息。作为标准,它没有提供技术实现,但是大部分的语言平台都有按照它规定的内容提供了自己的技术实现,所以实际在用的时候,只要根据自己当前项目的技术平台,到官网上选用合适的实现库即可。

作者:一行代码一首诗

链接:https://www.jianshu.com/p/60bbc1c3990e

JSON Web Token(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑和自包含的方式,用于在各方之间作为 JSON 对象安全地传输信息。作为标准,它没有提供技术实现,但是大部分的语言平台都有按照它规定的内容提供了自己的技术实现,所以实际在用的时候,只要根据自己当前项目的技术平台,到官网上选用合适的实现库即可。

作者:一行代码一首诗

链接:https://www.jianshu.com/p/60bbc1c3990e

来源:

著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。


要知道一个JWT是怎么产生以及如何用于会话管理,只要弄清楚JWT的数据结构以及它签发和验证的过程即可。

一.JWT的数据结构以及签发过程

一个JWT实际上是由三个部分组成:header(头部)、payload(载荷)和signature(签名)。这三个部分在JWT里面分别对应英文句号分隔出来的三个串:

作者:一行代码一首诗

链接:https://www.jianshu.com/p/60bbc1c3990e

来源:

著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。


先来看header部分的结构以及它的生成方法。header部分是由下面格式的 json 结构生成出来:


这个 json 中的typ属性,用来标识整个token字符串是一个JWT字符串;它的alg属性,用来说明这个JWT签发的时候所使用的签名和摘要算法,常用的值以及对应的算法如下:


typ跟alg属性的全称其实是type跟algorithm,分别是类型跟算法的意思。之所以都用三个字母来表示,也是基于JWT最终字串大小的考虑,同时也是跟JWT这个名称保持一致,这样就都是三个字符了…typ跟alg是JWT中标准中规定的属性名称,虽然在签发JWT的时候,也可以把这两个名称换掉,但是如果随意更换了这个名称,就有可能在JWT验证的时候碰到问题,因为拿到JWT的人,默认会根据typ和alg去拿JWT中的header信息,当你改了名称之后,显然别人是拿不到header信息的,他又不知道你把这两个名字换成了什么。JWT作为标准的意义在于统一各方对同一个事情的处理方式,各个使用方都按它约定好的格式和方法来签发和验证token,这样即使运行的平台不一样,也能够保证token进行正确的传递。

一般签发JWT的时候,header对应的 json 结构只需要typ和alg属性就够了。JWT的header部分是把前面的 json 结构,经过 Base64Url 编码之后生成出来的:


你可能感兴趣的:(2019-08-14)