Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准(RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登陆(SSO)场景。html
JWT的声明通常被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也能够增长一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。web
JWT的构成算法
第一部分咱们称它为头部(header)json
第二部分咱们称其为载荷(payload)安全
第三部分是签证(signature).bash
jwt的头部承载两部分信息:服务器
完整的头部就像下面这样的JSON:网络
而后将头部进行base64加密(该加密是能够对称解密的),构成了第一部分.分布式
载荷就是存放有效信息的地方。这个名字像是特指飞机上承载的货品,这些有效信息包含三个部分加密
标准中注册的声明 (建议但不强制使用) :
公共的声明 :
公共的声明能够添加任何的信息,通常添加用户的相关信息或其余业务须要的必要信息.但不建议添加敏感信息,由于该部分在客户端可解密.
私有的声明 :
私有声明是提供者和消费者所共同定义的声明,通常不建议存放敏感信息,由于base64是对称解密的,意味着该部分信息能够归类为明文信息。
定义一个payload:
而后将其进行base64加密,获得Jwt的第二部分。
jwt的第三部分是一个签证信息,这个签证信息由三部分组成:
这个部分须要base64加密后的header和base64加密后的payload使用.
链接组成的字符串,而后经过header中声明的加密方式进行加密 secret
组合加密,而后就构成了jwt的第三部分。
.
链接成一个完整的字符串,构成了最终的jwt:
在请求头里加入Authorization
,并加上Token
标注:
headers: { 'Authorization': 'Token' + token }
服务端会验证token,若是验证经过就会返回相应的资源。整个流程就是这样的: