我在后端使用spring安全性,但这通常适用于JWT auth的使用。
当客户端发送包含服务器先前发送的JWT令牌的请求时(在验证凭据之后,服务器如何确认令牌没有被弄乱?
验证的确切步骤是什么?
谢谢。
首先要简要概述JWT验证的工作原理。
以紧凑的形式,JSON Web令牌由用点(。)分隔的三个部分组成,它们是:
标题有效载荷签名
因此,JWT通常如下所示。
xxxxx.yyyyy.zzzzz
标题
标头通常由两部分组成:令牌的类型为JWT,以及所使用的签名算法,例如HMAC SHA256或RSA。
有效负载
令牌的第二部分是有效负载,其中包含声明。声明是有关实体(通常是用户)和其他数据的声明。
然后对有效负载进行Base64Url编码,以形成JSON Web令牌的第二部分。
请注意,对于已签名的令牌,此信息尽管可以防止篡改,但任何人都可以读取。除非将机密信息加密,否则请勿将其放入JWT的有效负载或报头元素中。]
签名
要创建签名部分,您必须获取编码的标头,编码的有效载荷,机密,标头中指定的算法,并对其进行签名。
例如,如果您想使用HMAC SHA256算法,则将通过以下方式创建签名:
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
签名用于验证消息在此过程中没有被更改,并且对于使用私钥进行签名的令牌,它还可以验证JWT的发送者是它所说的那个人。
因此,基本上每当客户端请求向服务器提出令牌时,总是重复令牌验证步骤,因此,如果在客户端发生任何操作,验证将失败,并且服务器应将未授权状态发送回客户端。
如果您正在寻找推荐的实施模式,则可以在问题的注释中找到。