如果生成新的JWT,如何使JWT过期

时间:2019-10-10 11:02:52

标签: php authentication jwt

我在 JWT实施中完全陌生,出现了一个问题。

我已经在php中使用 JWT 建立了用户登录身份验证。在用户登录时,如果用户的凭据有效,则登录API的响应是作为令牌存储的 cookie 令牌,而不是具有$_SESSION变量,而是通过调用API来获取用户数据在Web应用程序的每个页面上解码令牌并检索用户数据。

如果用户想更新其个人详细信息(姓名,电子邮件等),我想根据新的详细信息生成新的JWT ,并强制先前的过期或以某种方式使其无效。因此,在将来的API调用中,先前的令牌必须无效。 我曾想过将令牌存储在数据库中,但是我想这是不对的。

我如何使其起作用?

3 个答案:

答案 0 :(得分:2)

您必须将api设为有状态。
因此,您可以将对JWT的引用存储在数据库中并删除它,也可以将已撤销的令牌列入黑名单,并检查该令牌是否已被列入黑名单并因此被撤销了。

答案 1 :(得分:2)

无状态身份验证(在本例中为JWT)将用户会话数据存储在客户端(浏览器)上。

数据由IdP密钥签名,以确保会话数据的完整性和权威性。 由于用户会话存储在客户端上,因此服务器只能通过检查有效负载和签名是否匹配来验证其有效性。

缺点之一是您无法随时取消会话:由于用户会话存储在客户端,因此服务器无权删除会话。

您可以做什么:

您可以删除客户端上存储的JWT,并将其放入数据库黑名单中,并在每次有人调用API时进行检查

答案 2 :(得分:1)

您可以做两件事:

首先删除旧的JWT令牌,然后插入新的令牌。

或在数据库中创建一个字段(is_expired)以检查令牌的状态,默认值应为false,因此在创建新字段时,将其标记为true,而旧字段必须更改为false。