Jwt如何在Java中使用

  介绍

这篇文章给大家介绍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.Signature

2.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中使用