什么是JJWT
JJWT是一个提供端到端的JWT创建和验证的Java库。永远免费和开源(Apache License,版本2.0),JJWT很容易使用和理解。它被设计成一个以建筑为中心的流畅界 面,隐藏了它的大部分复杂性。
jwt的组成
Header: 标题包含了令牌的元数据,并且在最小包含签名和/或加密算法的类型
Claims: Claims包含您想要签署的任何信息
JSON Web Signature (JWS): 在header中指定的使用该算法的数字签名和声明
###jwt的框架:JJWT
JJWT的目标是最容易使用和理解用于在JVM上创建和验证JSON Web令牌(JWTs)的库。
JJWT是基于JWT、JWS、JWE、JWK和JWA RFC规范的Java实现。
JJWT还添加了一些不属于规范的便利扩展,比如JWT压缩和索赔强制。
---------------------
其实就是一个字符串:由三部分组成,头部、载荷与签名。
头部:(header)
一般放一些声明信息,比如:用什么加密,用什么编码。
头部用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等。
这也可以被表示成一个JSON对象:
{"typ":"JWT","alg":"HS256"}
使用base64进行编码之后:(至于为什么要用base64,这个我也不知道,好像jwt默认就是用base64编码的)
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
载荷(playload)
这里面放的是主要的有用的信息;
比如说:登陆的用户名,登录时间,登录的过期时间,
还可以放一些自己自定义的一些信息,不限制。
一般载荷这块个性化比较多。
载荷就是存放有效信息的地方,这些有效信息包含三个部分:
(1)标准中注册的声明(建议但不强制使用)
iss: jwt签发者
sub: jwt所面向的用户 //这个以后就是放我们登录的用户名
aud: 接收jwt的一方
exp: jwt的过期时间,这个过期时间必须要大于签发时间 //过期时间也可以放
nbf: 定义在什么时间之前,该jwt都是不可用的.
iat: jwt的签发时间
jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击
(2)公共的声明
公共的声明可以添加任何的信息,一般添加用户的相关信息或其他业务需要的必要信息.
但不建议添加敏感信息,因为该部分在客户端可解密。
---------------------
(3)私有的声明
私有声明是提供者和消费者所共同定义的声明,一般不建议存放敏感信息,
因为base64是对称解密的,意味着该部分信息可以归类为明文信息。
这个指的就是自定义的claim。
签名(signature)
就是把头部和载荷加到一起,进行加密(加密之前先加个盐进去)
jwt的第三部分是一个签证信息,这个签证信息由三部分组成:
header (base64后的)
payload (base64后的)
secret (盐)
这个部分需要base64加密后的header和base64加密后的payload使用。
连接组成的字符串,
然后通过header中声明的加密方式进行加盐secret组合加密,然后就构成了jwt的第三部分。
---------------------
首先说一下什么是JWT?
其实就是一个字符串:由三部分组成,头部、载荷与签名。
头部:(header)
一般放一些声明信息,比如:用什么加密,用什么编码。
头部用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等。
这也可以被表示成一个JSON对象:
{"typ":"JWT","alg":"HS256"}
使用base64进行编码之后:(至于为什么要用base64,这个我也不知道,好像jwt默认就是用base64编码的)
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
载荷(playload)
这里面放的是主要的有用的信息;
比如说:登陆的用户名,登录时间,登录的过期时间,
还可以放一些自己自定义的一些信息,不限制。
一般载荷这块个性化比较多。
载荷就是存放有效信息的地方,这些有效信息包含三个部分:
(1)标准中注册的声明(建议但不强制使用)
iss: jwt签发者
sub: jwt所面向的用户 //这个以后就是放我们登录的用户名
aud: 接收jwt的一方
exp: jwt的过期时间,这个过期时间必须要大于签发时间 //过期时间也可以放
nbf: 定义在什么时间之前,该jwt都是不可用的.
iat: jwt的签发时间
jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击
(2)公共的声明
公共的声明可以添加任何的信息,一般添加用户的相关信息或其他业务需要的必要信息.
但不建议添加敏感信息,因为该部分在客户端可解密。
---------------------
版权声明:本文为CSDN博主「我在写bug没事别打扰我」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010953880/article/details/86735797首先说一下什么是JWT?
其实就是一个字符串:由三部分组成,头部、载荷与签名。
头部:(header)
一般放一些声明信息,比如:用什么加密,用什么编码。
头部用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等。
这也可以被表示成一个JSON对象:
{"typ":"JWT","alg":"HS256"}
使用base64进行编码之后:(至于为什么要用base64,这个我也不知道,好像jwt默认就是用base64编码的)
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9
载荷(playload)
这里面放的是主要的有用的信息;
比如说:登陆的用户名,登录时间,登录的过期时间,
还可以放一些自己自定义的一些信息,不限制。
一般载荷这块个性化比较多。
载荷就是存放有效信息的地方,这些有效信息包含三个部分:
(1)标准中注册的声明(建议但不强制使用)
iss: jwt签发者
sub: jwt所面向的用户 //这个以后就是放我们登录的用户名
aud: 接收jwt的一方
exp: jwt的过期时间,这个过期时间必须要大于签发时间 //过期时间也可以放
nbf: 定义在什么时间之前,该jwt都是不可用的.
iat: jwt的签发时间
jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击
(2)公共的声明
公共的声明可以添加任何的信息,一般添加用户的相关信息或其他业务需要的必要信息.
但不建议添加敏感信息,因为该部分在客户端可解密。
---------------------
版权声明:本文为CSDN博主「我在写bug没事别打扰我」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u010953880/article/details/86735797