这篇文章给大家介绍Jwt如何在Java中使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
Java的优点是什么
1。简单,只需理解基本的概念,就可以编写适合于各种情况的应用程序;2。面向对象;3。分布性,Java是面向网络的语言;4。鲁棒性、java提供自动垃圾收集来进行内存管理,防止程序员在管理内存时容易产生的错误。5。安全性,用于网络,分布环境下的Java必须防止病毒的入侵。6。体系结构中立,只要安装了Java运行时系统,就可在任意处理器上运行。7。可移植性、Java可以方便地移植到网络上的不同机器。8。解释执行,Java解释器直接对Java字节码进行解释执行。
JWT特点
JWT默认是不加密,但也是可以加密的。生成原始令牌以后,可以用密钥再加密一次。
JWT不加密的情况下,不能将秘密数据写入JWT。
JWT不仅可以用于认证,也可以用于交换信息。有效使用JWT,可以降低服务器查询数据库的次数。
JWT的最大缺点是,由于服务器不保存会话状态,因此无法在使用过程中废止某个令牌,或者更改令牌的权限。也就是说,一旦JWT签发了,在到期之前就会始终有效,除非服务器部署额外的逻辑。
JWT本身包含了认证信息,一旦泄露,任何人都可以获得该令牌的所有权限。为了减少盗用,JWT的有效期应该设置得比较短。对于一些比较重要的权限,使用时应该再次对用户进行认证。
1。智威汤逊的原理
JWT官网:https://jwt。io/
JWT的原理是,服务器认证以后,生成一个JSON对象,发回给用户,就像下面这样。
{ “name"才能:,“John Doe" “才能角色,:,“管理员“, “才能到期时间,:,“,2018年7月1日0点0分, }
以后,用户与服务端通信的时候,都要发回这个JSON对象。服务器完全只靠这个对象认定用户身份。为了防止用户篡改数据,服务器在生成这个对象的时候,会加上签名(详见后文)。
服务器就不保存任何会话数据了,也就是说,服务器变成无状态了,从而比较容易实现扩展。
2。智威汤逊的数据结构
JWT大概就像下面这样。
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9。
引用>
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4
gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ。
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
它是一个很长的字符串,中间用点(。)分隔成三个部分。注意,JWT内部是没有换行的,这里只是为了便于展示,将它写成了几行。
JWT的三个组成部分依次如下。
<李>
·头(头部)
李> <李>·载荷(负载)
李> <李>·签名(签名)
李>#,写成一行,就是下面的样子 Header.Payload.Signature2.1头
页眉部分是一个JSON对象,描述JWT的元数据,通常是下面的样子。
{ “alg"才能:,“HS256" “typ"才能:,“JWT" }上面代码中,alg属性表示签名的算法(算法),默认是HMAC SHA256(写成HS256); typ属性表示这个令牌(令牌)的类型(类型),JWT令牌统一写为JWT。
最后,将上面的JSON对象使用Base64URL算法转成字符串。
2.2载荷
有效载荷部分也是一个JSON对象,用来存放实际需要传递的数据.JWT规定了7个官方字段,供选用。
<李>
iss(发行人):签发人
李> <李>exp(过期时间):过期时间
李> <李>子(主题):主题
李> <李>澳元(观众):受众
李> <李>nbf之前(不):生效时间
李> <李>iat(发布):签发时间
李> <李>jti (JWT ID):编号
李>除了官方字段,你还可以在这个部分定义私有字段、下面就是一个例子
{ “sub"才能:,“1234567890”, “name"才能:,“John Doe" “admin"才能:真实 }JWT默认是不加密的,任何人都可以读到,所以不要把秘密信息放在这个部分。
这个JSON对象也要使用Base64URL算法转成字符串。
2.3签名
签名部分是对前两部分的签的名,防止数据篡改。
首先,需要指定一个密钥(秘密)。这个密钥只有服务器才知道,不能泄露给用户。然后,使用标题里面指定的签名算法(默认是HMAC SHA256),按照下面的公式产生签名。
HMACSHA256 ( base64UrlEncode才能(头),+,“干净+ base64UrlEncode才能(载荷), 秘密才能)Jwt如何在Java中使用