JWT Spring 启动

JWT Spring Boot

请带走这个疑惑

我有一个 Spring 启动应用程序,使用 JWT 具有 spring 安全性。

我一直有一个问题是:Spring如何存储生成的令牌?

查看我的 tomcat 的管理器,我看到这个应用程序有一些打开的会话,但它只与 JWT 一起工作。我请求打开会话没有任何意义。

那么我可以假设 Spring 创建会话来存储生成的令牌吗?

您进行身份验证,然后从颁发者那里获得令牌。

当此令牌被提供给 spring 服务器时,资源服务器需要进行多次验证才能让您使用 api。

JWT 没有加密,它是 encoded,这意味着每个人都可以看到和阅读它的内容。但它也是 signed,因此您不能在不破坏标牌的情况下篡改其内容。

所以服务器做的第一件事就是验证签名以确保它没有被篡改。这可以通过多种方式完成,一种是获取令牌并将其发送给发行者,然后基本上询问“你好,这个令牌有效吗?”发行人说“YAY”或“NEY”。

如果需要来回发送 jwts 进行验证,这会产生大量额外的网络流量。

由于代币的标志是通过非对称加密完成的,资源服务器可以定期(例如每 30 分钟)向发行者询问 public 密钥,这样它就可以自己验证代币,而无需经常需要问他们是否有效。

此密钥通常以称为 JWK(Json 网络密钥)的格式发送,然后使用此密钥来验证完整性。如果此验证通过,它可以信任 jwts 内容,并开始检查验证日期、范围和其中的任何额外声明等。

然后如果令牌有效且未过期,您可以选择从 jwt 中的数据构造一个 UserDetails 对象。

如评论中所述。如果使用 JWT,则不需要会话。 你应该禁用会话创建。

您可以在此处阅读本文中有关会话的更多信息 Spring Security Session

您可以在这里阅读 spring 安全性 Session Managment