PHP:如何使用JWT从API注销

Jam*_*rge 5 php authorization logout jwt

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

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

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

  2. 服务器检查DB以确保用户有效

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

  4. 然后将令牌传递给用户,用户每当发出请求时都会发回服务器

现在我希望用户注销,我该怎么做,我对用户令牌不再有权力了.

Rav*_*yal 5

我也来这里寻找解决方案,但读了很多书后,我得出的结论很少,也没有说出可能的情况。

编辑注意:-切勿在令牌中存储任何潜在信息,因为读取令牌中的数据不需要密钥。Secret Key 仅用于验证 Base64 token 的签名。要检查这一点,请访问http://jwt.io并粘贴您的令牌。我添加这一点是因为我在某个地方看到开发人员在令牌中添加了用户的用户名和密码。请不要做这样的事情。

1.)如果客户端想在令牌到期时间之前注销,则帐户注销事件由客户端发起。 解决方案:- 从客户端的每个位置删除令牌。它可以存储在 DOM 中,或 JavaScript 变量中,或 HTML 密钥对存储中,或会话存储或 cookies 存储中。只要我们可以在浏览器中存储值,我们也有权删除这些值。一旦令牌从这个世界的每个角落被删除,用户就会被注销。

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

如果用户在紧急情况下注销怎么办,就像有人偷了令牌一样。如何销毁代币?

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

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

3.)设置较短的到期时间。在前一个令牌到期之前不久进行更新,而不让用户注意到这一点。时间可以是20秒左右。但您仍然必须考虑注意事项 1,因为任何拥有真实令牌的人都可以要求新令牌。

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

5.)在用户界面中添加清晰可见的注销按钮,以防止天真的用户,并引导用户在每次使用完您的应用程序后从您的应用程序注销。

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

7.)如果了解更多这样的内容,我会添加更多内容。

Invaliding JSON Web Tokens这个线程也有很多好的输入。正如问题评论中提到的。