PHP:如何使用JWT从API注销

时间:2015-12-30 20:58:43

标签: php authorization logout jwt

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

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

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

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

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

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

  5. 现在我希望用户注销,我该如何处理,我对用户令牌不再拥有权力。

1 个答案:

答案 0 :(得分:2)

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

  

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

1。)帐户注销事件由客户端启动,如果他想在令牌到期时间之前注销。 的解决方案: - 从客户端的每个位置删除令牌。它可以存储在DOM,JavaScript变量,HTML密钥对存储,会话存储或cookie存储中。我们可以在浏览器中存储任何值,我们也有权删除这些值。从该世界的每个角落删除令牌后,用户将被注销。

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

如果用户在紧急情况下注销,例如某人可能已将令牌收起来,该怎么办?如何销毁令牌?

如果JWT的密钥是stollen,那么答案就会怎么做。我们将快速更改密钥并为登录用户重新生成令牌。但是在用户的情况下我们应该改变什么?用户ID(我会说不。)。我们应该添加类似于借记卡/信用卡机制的帐户锁定机制,其中卡被锁定24小时。但在我们的情况下,我们应该将帐户锁定的结束时间略多于令牌的到期时间。

2。)代币就像导弹一样,一旦被解雇,我们就不能要求它们关闭。 我正在谈论理想的情况,如果你将被解雇的令牌的引用存储在数据库中,那么就没有使用JWT的意义了。我们可以使用任何哈希生成方法生成令牌。

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

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

5。)在您的用户界面中添加一个清晰可见的Logout按钮,以防止天真的用户,并指导用户每次完成您的应用程序时从您的应用程序注销。

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

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

Invalidating JSON Web Tokens这个帖子也有很多好的输入。如在评论中提到的那样。