如何验证JWT令牌? (春季安全)

时间:2019-12-29 22:35:29

标签: java spring security spring-security jwt

我在后端使用spring安全性,但这通常适用于JWT auth的使用。

当客户端发送包含服务器先前发送的JWT令牌的请求时(在验证凭据之后),服务器如何确认令牌没有被弄乱?

验证的确切步骤是什么?

谢谢。

1 个答案:

答案 0 :(得分:1)

首先,我们要简要概述一下JWT验证的工作原理。

在紧凑的形式中,JSON Web令牌由点(。)分隔的三个部分组成,分别是:

标题 有效载荷 签名

因此,JWT通常如下所示。

xxxxx.yyyyy.zzzzz

标题

标头通常由两部分组成:令牌的类型(即JWT)和所使用的签名算法,例如HMAC SHA256或RSA。

有效载荷

令牌的第二部分是有效负载,其中包含声明。声明是有关实体(通常是用户)和其他数据的声明。

然后将有效负载进行Base64Url编码,以形成JSON Web令牌的第二部分。

  

请注意,对于已签名的令牌,此信息尽管可以防止篡改,但任何人都可以读取。除非经过加密,否则请勿将机密信息放入JWT的有效负载或报头元素中。

签名

要创建签名部分,您必须获取编码的标头,编码的有效载荷,机密,标头中指定的算法,并对其进行签名。

例如,如果要使用HMAC SHA256算法,则将通过以下方式创建签名:

HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)

签名用于验证消息在此过程中是否未被更改,并且对于使用私钥进行签名的令牌,它还可以验证JWT的发送者是它所说的真实人。 / p>

因此,基本上,每当客户端请求向服务器发出令牌令牌时,令牌验证步骤始终会重复进行,因此,如果在客户端进行了任何操作,验证将失败,服务器应将未授权状态发送回给服务器。客户。

如果您正在寻找建议的实施模式,则可以在问题的注释中找到它。