PHP:如何使用 JWT 从 API 注销

Posted

技术标签:

【中文标题】PHP:如何使用 JWT 从 API 注销【英文标题】:PHP: How to Logout From API using JWT 【发布时间】:2016-04-04 21:04:23 【问题描述】:

所以我创建了一个使用基于令牌的登录身份验证的 API,现在我想创建注销但我不知道如何去做。

登录过程只需使用以下步骤:

    用户将用户名和密码传递给服务器

    服务器检查数据库以确保用户有效

    生成的令牌包含 uid 和其他详细信息

    然后将令牌传递给用户,用户在发出请求时将其发送回服务器

现在我想让用户退出,我该怎么做,我对用户令牌没有权力了。

【问题讨论】:

相关:Invalidating JSON Web Tokens 【参考方案1】:

我也是来这里寻找解决方案的,但是在阅读了很多之后,我得出的结论很少,或者说可能的情况。

编辑说明:-切勿将任何潜在信息存储在令牌中,因为读取令牌中的数据不需要密钥。密钥仅用于验证 Base64 令牌的签名。要查看此内容,请转到 http://jwt.io 并粘贴您的令牌。我之所以添加这一点,是因为我在某处看到开发人员在令牌中添加了用户的用户名和密码。请不要做这样的事情。

1.) 账户注销事件由客户端发起,如果他想在令牌到期时间之前注销。 解决方案:- 从客户端的每个地方删除令牌。它可以存储在 DOM、javascript 变量、html 密钥对存储、会话存储或 cookie 存储中。我们可以在浏览器中存储值的任何地方,我们也有权删除这些值。一旦从这个世界的每个角落删除令牌,用户就会退出。

上述解决方案中的注意事项 1

如果用户在紧急情况下退出,比如有人可能偷走了令牌,该怎么办。如何销毁令牌?

答案与我们的 JWT 密钥被盗时的结果相同。我们将快速更改密钥并为登录用户重新生成令牌。但是如果是用户,我们应该改变什么?用户 ID(我会说不)。我们应该添加一个类似于借记卡/信用卡机制的账户锁定机制,卡被锁定 24 小时。但在我们的例子中,我们的账户锁定结束时间应该比令牌的到期时间略长。

2.) 令牌就像导弹一样,一旦发射我们就不能要求它们关闭。 我说的是理想情况,如果您将触发令牌的引用存储在数据库中,那么使用 JWT 毫无意义。我们可以使用任何哈希生成方法生成令牌。

3.) 缩短到期时间。在前一个令牌到期之前一点点更新而不让用户注意到这一点。时间可以是20秒左右。您仍然必须考虑警告 1,因为任何拥有真正令牌的人都可以要求新的令牌。

4.) 我们还可以在token中添加一个IP地址字段,并检查用户当前的IP地址是否与登录时使用的IP地址匹配。它可以防止远程黑客。

5.) 在您的用户界面中添加一个清晰可见的注销按钮,以防止幼稚的用户,并引导用户在每次完成您的应用程序时退出您的应用程序。

6.) 在令牌元中添加客户端类型。对于移动应用程序,检查 HMAC 或 IMEI 代码,而不是 IP 地址,因为移动应用程序需要保持运行会话,因为没有人希望他或她的用户从他们的移动应用程序中注销。但是妥协者可以妥协 IMEI 和 HMAC 地址。但在 HMAC、IMEI 或任何其他可用字符串之间随机使用可以增加一点安全性。

7.)如果了解更多,我会添加更多。

Invalidating JSON Web Tokens 这个线程也有很多好的输入。如问题评论中所述。

【讨论】:

以上是关于PHP:如何使用 JWT 从 API 注销的主要内容,如果未能解决你的问题,请参考以下文章

使用 JWT 令牌使用 AdonisJS 注销

如何在 ReactJS 上使用 JWT 令牌注销

Spring Boot JWT - 如何实现刷新令牌和注销 REST-API

如何注销或过期 ASP.NET Core Web API 的 JWT 令牌?

jwt令牌过期后如何注销

如何在整个会话中保留 JWT 令牌直到用户注销?